Mar*_*man 1 c# encryption cryptography sha1
我正在尝试在ASP.NET应用程序和另一个基于UNIX的应用程序之间共享身份验证,其中散列密码存储在数据库中.我需要确保两个平台上的哈希算法匹配.
这是我在C#中散列的方式:
var sha1 = new SHA1CryptoServiceProvider(); var passwordBytes = Encoding.UTF8.GetBytes(password); var passwordHash = sha1.ComputeHash(passwordBytes); var base64 = Convert.ToBase64String(passwordHash); return base64;
如果我使用密码,p@ssw0rd那么散列是该散列57B2AD99044D337197C0C39FD3823568FF81E48A的base64 V7KtmQRNM3GXwMOf04I1aP+B5Io=.base64哈希是存储在db中的内容.
如果我在UNIX上做同样的事情,我得到一个完全不同的哈希:
echo p@ssw0rd | iconv -f ISO-8859-1 -t UTF-8 | shasum -a 1 | base64 -e
产生
ZTU3NmQwNmUzMTAwNmRkNzFhNTFjZTg5ZjViMGI4NWM2NTMyNzg3OCAgLQo=
如果您使用OpenSSL进行尝试,请使用此方法echo "p@ssw0rd" | openssl dgst -sha1 | openssl enc -base64,您将获得相同的哈希值.
导致不同哈希计算的两个SHA1算法有什么不同?我也不腌这些.
UPDATE
秘诀如下:
echo -n "p@ssw0rd" | openssl dgst -sha1 -binary | openssl enc -base64
echo -n剥离换行符,-binary是必不可少的.
希望这可以帮助别人.
谢谢,马克
echo -n var passwordHashHex = String.Concat(Array.ConvertAll(passwordHash , x => x.ToString("X2"));在C#中执行base64转换之前,请使用eg 转换为十六进制| 归档时间: |
|
| 查看次数: |
2190 次 |
| 最近记录: |