C# emulating php crypt
本文关键字:crypt php emulating | 更新日期: 2023-09-27 18:11:37
我需要用c#对密码进行散列处理,以使其他软件能够理解它。原来php的crypt
函数就是这样做的。它有以下输出
$6$rounds=1000$1f$yeKGQo0b8MqqMpocFla8uKLE6GOpEygSQUH4qMi4msJZsD50Eh00bU4GwoGGPEeLMdG6C17ehl/l8SrcOABdC0
我猜是SHA512。如何用c#实现php的crypt功能?
原PHP
$salt = '$6$rounds=1000$'.dechex(rand(0,15)).dechex(rand(0,15)).'$';
$crypted = crypt($password, $salt);
CryptSharp会对所有常见的crypt变化进行计算。
生成SHA-512加盐哈希(该算法的默认轮数为5000):
using CryptSharp;
string hash = Crypter.SHA512.Crypt(password);
使用自定义轮数:
var saltOptions = new CrypterOptions() { { CrypterOption.Rounds, 10000 } };
string salt = Crypter.SHA512.GenerateSalt(saltOptions);
string hash = Crypter.SHA512.Crypt(password, saltOptions);
验证哈希:
bool matched = Crypter.CheckPassword(testPassword, hash);
另一个注意事项,原始PHP应该是真正安全的。salt只有8位,使用rand生成(使用openssl_random_pseudo_bytes代替)。该散列特别选择默认轮数的五分之一。