具有指定转换次数的 SHA512 哈希

问题描述 投票:0回答:1

我需要从字符串创建 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

在一次迭代结果正常,但在第二次迭代时,我在程序中收到了另一个哈希字符串。

c# sha512
1个回答
0
投票

来自 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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.