Как получить такой же результат с Dart sha256 и C # sha256? - PullRequest
0 голосов
/ 22 апреля 2019

Я должен преобразовать строку в sha256 в дротике.Например, я использую String a = "2424242401224672"; В моем коде ниже я получаю результат как;Дайджест: 7b73641404a8fe6a4b1161a85db736be2a6c07a046109b993186f7a22190bf13

Код:

  String a = "2424242401224672";
  var bytes = utf8.encode(a.hashCode.toString());
  var digest = sha256.convert(bytes);
  print("digest: $digest");

В другой стороне используйте c # для sha256.Они получают байты из строки (объекта), используя c # MemoryStream, BinaryFormatter и XMLSerilizer.

Но когда я показываю свой результат, мне говорят, что они получают другой результат в C # sha256?

Как получить то же самоерезультат с Dart sha256 и C # sha256?

Обновление:

Строка «2424242401224672» в CSharp имеет значение sha256 как: DE4841A9E623AF7D5C598A67C2461702485D5FCF074C0B070D5C070F570870410570410570410570410570470410570410570410570470570570410570570410570410510570410510510510510510510510510510510510577810510510510510875* Обновление-2:

Код Csharp:

private static string ComputeHash(byte[] objectAsBytes)
{                        
    try
    {
        SHA256 shaM = new SHA256Managed();
        byte[] result = shaM.ComputeHash(objectAsBytes);

        return byteArrayToHex(result);
    }
    catch (ArgumentNullException ane)
    {
        return null;
    }
}



private static byte[] ObjectToByteArray(Object objectToSerialize)
{            
    MemoryStream ms = new MemoryStream();
    //BinaryFormatter formatter = new BinaryFormatter();            
    System.Xml.Serialization.XmlSerializer x = new System.Xml.Serialization.XmlSerializer(objectToSerialize.GetType());
    try
    {
        //Here's the core functionality! One Line!
        //To be thread-safe we lock the object
        lock (locker)
        {
            x.Serialize(ms, objectToSerialize);
            //formatter.Serialize(fs, objectToSerialize);
        }
        //return fs.ToArray();                
        return ms.ToArray();
    }
    catch (SerializationException se)
    {                
        return null;
    }
    finally
    {
        //fs.Close();
        ms.Close();
    }
}

}

1 Ответ

1 голос
/ 22 апреля 2019

Вы не хешировали UTF-8 представление вашей строки.Вы хэшировали UTF-8 представление хеш-кода вашей строки.То есть:

  var bytes = utf8.encode(a.hashCode.toString());

должно быть просто:

  var bytes = utf8.encode(a);
...