现在已经很晚了,我很累,可能也有些迟钝...
我编写了一个应用程序,需要对其进行安全保护,以便只能在我生成密钥的机器上运行。 目前我正在获取BIOS序列号并从中生成哈希值,然后使用XML RSA私钥对其进行加密。接着我会签署XML以确保其不被篡改。 我试图打包公钥以便解密和验证签名,但每当我尝试以与生成签名的用户不同的用户身份执行代码时,签名就会失败。
我的大部分代码都是修改自我找到的示例代码,因为我对RSA加密不太熟悉。以下是我使用的代码以及我认为需要使用的代码,任何反馈将不胜感激,因为我现在非常迷茫。 我最初使用的原始代码如下,只要启动程序的用户与最初签署文档的用户相同,这段代码就可以正常工作...
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
// Create a new RSA signing key and save it in the container.
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams)
{
PersistKeyInCsp = true,
};
这段代码是我认为应该做的,但无论我怎么做,无论是同一用户还是不同用户,都无法验证签名...
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider();
//Load the private key from xml file
XmlDocument xmlPrivateKey = new XmlDocument();
xmlPrivateKey.Load("KeyPriv.xml");
rsaKey.FromXmlString(xmlPrivateKey.InnerXml);
我认为这与密钥容器名称有关(在这里我真的很蠢,请原谅我)。我相当确定这是导致第一种情况下它能够正常工作,同时阻止第二种情况下它无法正常工作的原因所在...
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
有没有一种方法可以在应用程序许可证生成时使用私钥对XML进行签名/加密,然后将公钥放入应用程序目录中并使用其来验证/解密代码?如果我可以使签名部分正常工作,那么我可以放弃加密部分。我将其用作备份来混淆我从中提取许可证代码的源。这些都有意义吗?我是个蠢货吗?谢谢任何人能给我的帮助。