gpt4 book ai didi

c# - 经典的 asp 使用 capicom 进行 md5 哈希-结果不同于 .net System.Security.Cryptography

转载 作者:太空狗 更新时间:2023-10-30 01:09:03 25 4
gpt4 key购买 nike

在经典 ASP (VBScript) 中使用 CAPICOM 执行 MD5 哈希时,如下所示:

With server.CreateObject("CAPICOM.HashedData")
.Algorithm = 3 ' CAPICOM_HASH_ALGORITHM_MD5
.Hash "password"

md5Pwd = .Value
End With

我得到这个结果:B081DBE85E1EC3FFC3D4E7D0227400CD

当我使用 .NET 时,我得到了这个结果:5f4dcc3b5aa765d61d8327deb882cf99

为什么MD5字符串不一样?我做错了什么?

这是我的 C# 函数:

MD5 md5Hasher = MD5.Create();
byte[] data = md5Hasher.ComputeHash( Encoding.Default.GetBytes( val ) );

StringBuilder sBuilder = new StringBuilder();

// Loop through each byte of the hashed data
// and format each one as a hexadecimal string.
for( int i = 0; i < data.Length; i++ ) {
sBuilder.Append( data[i].ToString( "x2" ) );
}

// Return the hexadecimal string.
return sBuilder.ToString();

最佳答案

问题是您正在使用 Encoding.Default 编码 represents 7 bit ASCII characters .同时,“CAPICOM manipulates only Unicode strings while validating and generating digital signatures ”。

因此,Encoding.Default.GetBytes 处理单字节字符(顺便丢失任何非 ASCII 数据),而 CAPICOM.HashedData 将它们视为 2 字节 Unicode 字符。

Encoding.Default 替换为 Encoding.Unicode 以使您的 .NET 实现与 CAPICOM 兼容。

另外请注意,使用 data[i].ToString("X2") 生成大写结果,就像您在 CAPICOM 实现中所做的那样。

关于c# - 经典的 asp 使用 capicom 进行 md5 哈希-结果不同于 .net System.Security.Cryptography,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7876097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com