我使用以下C#代码从字符串计算MD5哈希 . 它运行良好,生成一个32个字符的十六进制字符串,如下所示: 900150983cd24fb0d6963f7d28e17f72
string sSourceData;
byte[] tmpSource;
byte[] tmpHash;
sSourceData = "MySourceData";
//Create a byte array from source data.
tmpSource = ASCIIEncoding.ASCII.GetBytes(sSourceData);
tmpHash = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
// and then convert tmpHash to string...
有没有办法使用这样的代码生成一个16个字符的十六进制字符串(或12个字符的字符串)?一个32个字符的十六进制字符串是好的,但我认为客户输入代码是无聊的!
10 回答
我想在字符串MD5中使用UTF-8编码会更好 .
您可以使用
Convert.ToBase64String
将MD5的16字节输出转换为~24字符串 . 在不降低安全性的情况下更好一点 . (j9JIbSY8HuT89/pwdC8jlw==
为您的例子)完全取决于您想要实现的目标 . 从技术上讲,您可以从MD5哈希的结果中获取前12个字符,但MD5的规范是生成32个字符 .
减小散列的大小会降低安全性,并增加冲突和系统崩溃的可能性 .
也许如果你让我们更多地了解你想要实现的目标,我们可能会提供更多帮助 .
支持字符串和文件流 .
例子
根据MSDN
创建MD5:
尝试使用LINQ创建MD5哈希的字符串表示,但是,没有一个答案是LINQ解决方案,因此将其添加到可用解决方案的大杂烩中 .
MD5哈希是128位,因此您不能用十六进制表示少于32个字符...