很晚了,我累了,而且可能很密集......
我编写了一个需要保护的应用程序,因此它只能在我为其生成密钥的机器上运行。我现在正在做的是获取 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 进行签名/加密,然后将公钥放到应用程序目录中并使用它来验证/解密代码?如果我能让签名部分正常工作,我可以放弃加密部分。我用它作为备份来混淆我键入的许可证代码的来源。
这有什么意义吗?我是个彻头彻尾的笨蛋吗?
感谢任何人都可以在这方面给我的任何帮助..