我需要用另一种软件理解的方式用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);
答案 0 :(得分:0)
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确实应该是安全的。 salt只有8位并且使用rand生成(使用openssl_random_pseudo_bytes代替)。哈希特别选择默认轮数的五分之一。