符合特定Checksum C#的AES 256位密钥生成

时间:2017-05-18 11:58:49

标签: c# encryption aes

我获得此验证码,以证明AES密钥是否合规:

类Cypher.cs

public bool ValidateCheckSumAESKey(string strAESKey)
    {

        string base64AESKey = strAESKey;
        const int N = 3;
        const string valSumCalc = "qx6p";


        SHA256Managed h = new SHA256Managed();
        byte[] base64AESKeyBytes = System.Text.Encoding.ASCII.GetBytes(base64AESKey);
        byte[] sha256hash = h.ComputeHash(base64AESKeyBytes);

        byte[] sha256hashNbytes = new byte[N];
        Array.Copy(sha256hash, 0, sha256hashNbytes, 0, sha256hashNbytes.Length);

        string base64sha256hashNbytes = Convert.ToBase64String(sha256hashNbytes);

        string result = base64sha256hashNbytes.Replace("=", "");


        if (0 == string.Compare(result, valSumCalc))
        {
            return true;
        }
        else
        {
            return false;
        }
    }

所以,给出一个示例键" cWhay3H4asTvRzXzXGZQ3KyBEu9BZaIxl8J + L4Bhr5A ="通过校验和。

我正在尝试使用

生成AES密钥
   public string Encrypt()
    {
        AesManaged aes = new AesManaged();
        aes.KeySize = 256;
        return Convert.ToBase64String(aes.Key);
    }

但即使我在主类

 Cypher cf = new Cypher();

 bool boolValid = false;
 while (!boolValid)
 {
    string strKey = cf.Encrypt();
    boolValid = cf.ValidateCheckSumAESKey(strKey);
 }

...它可以运行几个小时而无需找到一个有效的密钥。我怎样才能缩短循环以更快地找到符合要求的密钥?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

4个base64个字符代表24位信息,为您提供16777216种不同的组合。

衡量Encrypt()的速度应该可以很好地说明平均尝试1600万到1700万个病例需要多长时间。

考虑在每次调用时生成一个新的随机密钥。随机数据通常可能是系统上有限的资源,可能会减慢您的速度。特别是尝试测量new AesManaged();的速度。