2012-09-13 17 views
0

我试图得到一个MD5哈希值:WinRT的MD5 hashage

 String clearKey = "test"; 
     IBuffer buffEntry = CryptographicBuffer.ConvertStringToBinary(clearKey, BinaryStringEncoding.Utf8); 
     HashAlgorithmProvider algProvider = HashAlgorithmProvider.OpenAlgorithm(HashAlgorithmNames.Md5); 

     IBuffer buffHashed = algProvider.HashData(buffEntry); 

     byte[] bytesKey; 
     CryptographicBuffer.CopyToByteArray(buffHashed, out bytesKey); 
     Debug.WriteLine(String.Format("bytesKey lenght : {0}", bytesKey.Length)); 

为什么我的结果的大小为16个字节?如何获得经典的32字节结果?

感谢你的帮助,

+0

您是否使用这个派生自密码的钥匙吗?在这种情况下,MD5显然是错误的选择。您应该使用KDF,例如PBKDF2。 – CodesInChaos

+0

不,这是用于解决字节混合文件的代码的一部分 –

回答

3

MD5有128位或16字节输出。所以期望32个字节是错误的。我假设有32个字节,你的意思是一个十六进制编码的字符串,其中每个字节映射到两个字符,产生一个32个字符的字符串。

在地铁里你可以CryptographicBuffer.EncodeToHexString。将字节转换为十六进制字符串。

你的情况,这将成为:

string md5Hex = CryptographicBuffer.EncodeToHexStringbuffHashed(buffEntry); 
+0

谢谢!但我如何转换byte []中的十六进制字符串? System.Convert只为我提供了转换base64字符串。事实上,我正在寻找相当于我的JAVA代码:byte [] bytesKey = hashedHexString.getBytes(“utf-8”),它给了我一个大小为32的字节[] –

+0

您可以在十六进制字符串上使用ConvertStringToBinary 。但为什么这样呢?这会使散列的大小加倍,而不会获得任何安全性。 – CodesInChaos

+0

这是为了解决一个字节混合文件,键的字节和大小被用作盐,我只是找到相当于我的java代码:System.Text.Encoding.UTF8.GetBytes(hexstring)。再次感谢 –