我需要从字符串创建 SHA512:
20191018143572123034102012221314181237774212
它说,我必须使用 5000 次转换,哈希结果应该是:
f8b915776eab735fdd10266b2e66068447904852b82c30eeb6de30703a087eb17ea4c4a37630494607194ddb9354c1211bd984fb5f4d9cff95f5a24ed52065e7
但我最终的哈希字符串是:
B4CA157DBBC9DFC22A8046092C00367CBDB51F0D780A428CB7731251FA29D1E426E0853E0F52A1ACA8460D6D1679477509490D7F4305DCDC7D77FD0CC1993D3A
我做错了什么?
我正在使用此代码:
static void Main(string[] args)
{
string sha512 = "";
string puvodni = "20191018143572123034102012221314181237774212";
Console.WriteLine("Puvodni: " + puvodni);
for (int i = 0; i < 5000; i++)
{
sha512 = TestCrypt.ComputeSHA512(puvodni);
Console.WriteLine("Hash: " + sha512);
puvodni=sha512;
}
}
internal class TestCrypt
{
public static string ComputeSHA512(string s)
{
StringBuilder sb = new StringBuilder();
using (SHA512 sha512 = SHA512.Create())
{
byte[] hashValue = sha512.ComputeHash(Encoding.UTF8.GetBytes(s));
foreach (byte b in hashValue)
{
sb.Append($"{b:X2}");
}
}
return sb.ToString();
}
}
编辑
我仍然遇到问题,请将我的程序更新为此。尝试使用 SHA512 内置函数,也是 BouncyCastle,但结果是相同的。
static void Main(string[] args)
{
string puvodni = "20191018143572123034102012221314181237774212";
Console.WriteLine("Puvodni: " + puvodni);
//varianta 1
SHA512 sha512 = SHA512.Create();
byte[] hash = Encoding.UTF8.GetBytes(puvodni);
for (int i = 0; i < 2; i++)
{
hash=sha512.ComputeHash(hash);
string result = BitConverter.ToString(hash).Replace("-", "");
Console.WriteLine(i.ToString() + ". Hash: " + result);
}
//varianta 2
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(puvodni);
Org.BouncyCastle.Crypto.Digests.Sha512Digest digester = new Org.BouncyCastle.Crypto.Digests.Sha512Digest();
for (int i = 0; i < 2; i++)
{
byte[] retValue = new byte[digester.GetDigestSize()];
digester.BlockUpdate(bytes, 0, bytes.Length);
digester.DoFinal(retValue, 0);
string result1 = BitConverter.ToString(retValue).Replace("-", "");
Console.WriteLine("BouncyCastle Hash: " + i.ToString() + ". " + result1);
bytes=retValue;
}
}
我需要与此页面相同的结果:https://www.podatki.gov.pl/kalkulator-sha-512 在哪里: 电话:1435721230 电话号码: 34 1020 1222 1314 1812 3777 4212 日期: 18-10-2019
在一次迭代结果正常,但在第二次迭代时,我在程序中收到了另一个哈希字符串。
在 https://www.podatki.gov.pl/kalkulator-sha-512
进行逆向工程 .js 之后static string ComputeHash(SHA512 sha512, string value)
{
var bytes = Encoding.UTF8.GetBytes(value);
var hash = sha512.ComputeHash(bytes);
// everytime create hash from hex string from prev. iteration
return Convert.ToHexString(hash).ToLower();
}
static string CreateHash(string nip, string account, string date)
{
string pattern = $"{date}{nip}{account}";
using (SHA512 sha512 = SHA512.Create())
{
var result = pattern;
for (int i = 0; i < 5000; i++)
{
result = ComputeHash(sha512, result);
}
return result;
}
}