当前位置: 首页 > 编程语言 > C#

使用RSA密钥共享保护许可证密钥

时间:2023-04-10 21:49:51 C#

使用RSA密钥保护许可证密钥来晚了,我累了,而且可能很密集......我写了一个我需要保护的应用程序,所以它只会在我生成密钥的机器上工作。我现在正在做的是获取BIOS序列号并从中生成散列,然后使用XMLRSA私钥对其进行加密。然后我签署XML以确保它没有被篡改。我正在尝试包装公钥以解密和验证签名,但每次我尝试以与生成签名的用户不同的用户身份执行代码时,我的签名都失败了。我的大部分代码都是根据我发现的示例代码修改的,因为我对RSA加密的熟悉程度不如我希望的那样。下面是我正在使用的代码以及我认为我需要使用什么才能使其正常工作...任何反馈将不胜感激,因为我现在很遗憾我正在处理的原始代码就是这样,只要当用户启动与最初签署文档的程序相同时,此代码工作正常...CspParameterscspParams=newCspParameters();cspParams.KeyContainerName="XML_DSIG_RSA_KEY";cspParams.Flags=CspProviderFlags.UseMachineKeyStore;//创建一个新的RSA签名密钥并将其保存在容器中。RSACryptoServiceKeyProvider=newRSACryptoServiceProvider(cspParams){PersistKeyInCsp=true,};这段代码是我认为我应该做的,但无论我做什么签名都无法验证,无论是同一个用户还是另一个...RSACryptoServiceProviderrsaKey=newRSACryptoServiceProvider();//从xml文件XmlDocument中加载私钥xmlPrivateKey=newXmlDocument();xmlPrivateKey.Load("KeyPriv.xml");rsaKey.FromXmlString(xmlPrivateKey.InnerXml);我相信这与密钥容器名称有关(请原谅我是一个真正的笨蛋)我很确定这就是导致它在第一种情况下工作并在第二种情况下阻止它的原因......cspParams.KeyContainerName=“XML_DSIG_RSA_KEY";生成应用程序许可证时用私钥对XML进行签名/加密,然后将公钥放在应用程序目录中并使用它来验证/解密代码?如果我能让签名部分工作,我就可以删除加密部分。我用它作为备份来混淆我关心的许可证代码的来源。这有意义吗?我是个彻头彻尾的笨蛋吗?感谢任何人都可以帮助我的帮助。我使用这种方法使用存储在xml文件中的私钥对xml文档进行签名,然后将其作为资源嵌入到应用程序.dll中。我认为您可能正在努力获得对密钥库的访问权限,这也会给将代码传输到其他服务器等带来麻烦。下面是使用私钥作为嵌入资源对文档进行签名的代码:(Sign是该方法所在类的名称,Licensing.Private.Private.xml是默认命名空间的组合资源+文件夹+文件名)publicstaticvoidSignDocument(XmlDocumentxmldoc){//从嵌入的XML私钥中获取XML内容。流s=null;字符串xmlkey=string.Empty;尝试{s=typeof(Sign).Assembly.GetManifestResourceStream("Licensing.Private.Private.xml");//读入XML内容。StreamReader阅读器=新的StreamReader(s);xmlkey=读者。读到结束();读者。关闭();}catch(Exceptione){thrownewException("Error:couldnotimportkey:",e);}//从嵌入的//XML文档资源(私钥)创建一个RSA加密服务提供者。RSACryptoServiceProvidercsp=newRSACryptoServiceProvider();csp.FromXmlString(xmlkey);//创建XML签名对象.SignedXmlsxml=newSignedXml(xmldoc);sxml.SigningKey=csp;//设置文档的规范化方法.sxml.SignedInfo.CanonicalizationMethod=SignedXml.XmlDsigCanonicalizationURL;//暂无评论。//为XPath转换创建一个空引用(未封装)。Referencer=newReference("");//创建XPath转换并将其添加到引用列表。r.AddTransform(newXmlDsigEnvelopedSignatureTransform(false));//添加对SignedXml对象的引用。sxml.AddReference(r);//计算签名。sxml.ComputeSignature();//获取签名XML并将其添加到文档元素中。XmlElementsig=sxml.GetXml();xmldoc.DocumentElement.AppendChild(sig);}使用以下代码生成private.xml和public.xml密钥显然,要保证private.xml文件的安全。RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();File.WriteAllText(@"C:privateKey.xml",rsa.ToXmlString(true));//私钥File.WriteAllText(@"C:publicKey.xml",rsa.ToXmlString(false));//PublicKey猜测,问题是不同的用户无法访问为第一个用户存储的密钥(注意:我不是加密专家)。以上就是C#学习教程:使用RSA密钥保护许可证密钥分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: