简体   繁体   English

如何使用Dart sha256和C#sha256获得相同的结果?

[英]How to get same result with Dart sha256 and C# sha256?

I have to convert string to sha256 in dart. 我必须在dart中将字符串转换为sha256。 For example I use String a = "2424242401224672"; 例如,我使用String a =“ 2424242401224672”; In my code below I get an result as; 在下面的代码中,我得到如下结果: digest: 7b73641404a8fe6a4b1161a85db736be2a6c07a046109b993186f7a22190bf13 摘要: 7b73641404a8fe6a4b1161a85db736be2a6c07a046109b993186f7a22190bf13

The Code: 编码:

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

In other party use c# for sha256. 在另一方中,将c#用于sha256。 They get bytes from string(object) using c# MemoryStream, BinaryFormatter and XMLSerilizer. 他们使用c#MemoryStream,BinaryFormatter和XMLSerilizer从字符串(对象)获取字节。

But when I show my result they told me that they get different result in C# sha256? 但是当我显示结果时,他们告诉我在C#sha256中得到不同的结果吗?

How to get same result with Dart sha256 and C# sha256? 如何使用Dart sha256和C#sha256获得相同的结果?

Update: 更新:

The string "2424242401224672" in CSharp has a sha256 value as: DE4841A9E623AF7D5C598A67C2461702485F6B77C3EB5448FA5E0DDF074C70D8 CSharp中的字符串“ 2424242401224672”的sha256值为: DE4841A9E623AF7D5C598A67C2461702485F6B77C3EB5448FA5E0DDF074C70D8

Update-2: 更新2:

The csharp code: 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();
    }
}

} }

You did not hash the UTF-8 representation of your string. 您没有哈希字符串的UTF-8表示形式。 You hashed the UTF-8 representation of your string's hashcode . 您对字符串的哈希码的UTF-8表示进行了哈希处理 That is: 那是:

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

should be just: 应该只是:

  var bytes = utf8.encode(a);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM