我需要使用另一种软件可以理解的方式用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针对所有常见的加密变体进行计算。
生成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应该确实受到保护。盐只有8位,并且使用rand生成(改为使用openssl_random_pseudo_bytes)。哈希专门选择默认轮数的五分之一。