【发布时间】:2013-02-12 14:59:21
【问题描述】:
我正在使用 Brett 给出的这个例子:
然后这样做:
public static bool VerifyLicenseKey(string applicationGuid)
{
Console.WriteLine("G: " + applicationGuid);
var appSettings = AppSettings.GetInstance();
if (appSettings == null)
{
return false;
}
var hwinfo = HardwareInfo.GetHardwareSerial();
Console.WriteLine("h: " + hwinfo);
Console.WriteLine("a: " + applicationGuid);
var currentSerial = Crypto.EncryptStringAES(hwinfo, applicationGuid);
Console.WriteLine("c: " + currentSerial);
Console.WriteLine("o: " + appSettings.LicenseSerialNumber);
if (currentSerial == appSettings.LicenseSerialNumber)
{
return true;
}
return false;
}
}
GetHardwareSerial 和 applicationGuid 每次都以相同的方式返回,但当我调用 EncryptStringAES 时却不是。
我是否使用了错误的类?不是每次都一样吗?
如果没有,是否有人有一个更好的例子,其中加密的值是相同的?
【问题讨论】:
-
这些信息真的是秘密的,还是只需要正确?我想你想要message authentication code 或digital signature,而不是加密。
-
或者您可以使用更简单的 MD5 哈希或 CRC32 校验和。
-
你到底想在这里做什么?这对我来说没有任何意义。你能解释一下你在这里试图解决什么问题以及为什么你认为加密是一个合适的解决方案吗?加密应该用于两件事且仅用于两件事:(1) 对秘密消息进行编码和解码,以及 (2) 对消息进行数字签名。你似乎没有做这两件事,所以很难评估你在哪里做错了;整件事似乎都错了。
-
至于您的问题:对于给定的明文加密两次后产生相同的密文,没有任何要求。要求是密文解密时产生明文;可能有许多密文解密为相同的明文。正如我之前所说,如果您没有使用密文来保护秘密消息,那么您使用的是错误的工具。
-
那你需要加密做什么?如果它是一个简单的机制,那么保持简单。如果您需要的是“请远离”标志,那么您为什么要使用带有激光和鳄鱼的钢闸门?或者,更准确地说,是带有激光和鳄鱼以及敞开的后门的钢闸门?
标签: c# encryption