[英]AES 256-Bit key generation to comply with specific Checksum C#
我得到了这个验证码,以证明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);
}
...它可以运行几个小时而无需找到一个有效的密钥。 我怎样才能缩短循环以更快地找到符合要求的密钥?
先感谢您。
4 base64字符代表24位信息,为您提供16777216种不同的组合。
测量Encrypt()
的速度应该可以很好地指示平均尝试1600万到1700万个案例需要多长时间。
考虑在每次调用时生成一个新的随机密钥。随机数据通常可能是系统上有限的资源,可能会减慢您的速度。 特别是尝试测量new AesManaged();
的速度new AesManaged();
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.