我需要使用另一种软件可以理解的方式用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)。哈希专门选择默认轮数的五分之一。

08-08 04:56