Java C中的私钥加密和公钥解密#
我有一个C#桌面应用程序,它需要许可证才能启动应用程序,因此它将调用运行在云上的Java应用程序,该应用程序将生成许可证 因此,我考虑使用RSA加密和解密许可证信息,如许可证有效性 我推荐了以下链接:- 问题是我想用Java用私钥加密许可证信息,用C#用公钥解密 是的,这是相反的场景,我将把公钥放在客户端拥有的桌面应用程序中。它可以读取数据,我不想透露私钥,因为任何人都可以使用私钥生成许可证。我没有任何解决方案可以帮助跨平台实现这一点 可能吗?我也可以使用AES,但同样的加密和解密密钥 编辑: 我的申请目前正在进行:- 它需要一些唯一的机器id和生成许可证(从Java发送到桌面),在许可证中我们有这个唯一id。所以当应用程序启动时,我们检查许可证中的机器id和当前系统的机器id是否相同 我不确定在这种情况下数字签名将如何工作?你能给我举个代码例子吗。(可以跨平台工作)RSA(或任何其他非对称加密方案)不能以这种方式工作。您总是使用公钥加密,使用私钥解密 您可能希望对许可证应用数字签名,而不是对其进行加密。这样的签名是使用私钥创建的,并且可以在客户机中仅使用公钥进行验证 使用签名的工作原理如下:Java C中的私钥加密和公钥解密#,java,c#,security,encryption,cryptography,Java,C#,Security,Encryption,Cryptography,我有一个C#桌面应用程序,它需要许可证才能启动应用程序,因此它将调用运行在云上的Java应用程序,该应用程序将生成许可证 因此,我考虑使用RSA加密和解密许可证信息,如许可证有效性 我推荐了以下链接:- 问题是我想用Java用私钥加密许可证信息,用C#用公钥解密 是的,这是相反的场景,我将把公钥放在客户端拥有的桌面应用程序中。它可以读取数据,我不想透露私钥,因为任何人都可以使用私钥生成许可证。我没有任何解决方案可以帮助跨平台实现这一点 可能吗?我也可以使用AES,但同样的加密和解密密钥 编辑
<license>
<hardwareId>someValue</hardwareId>
<serial>123456789</serial>
<feature1 enabled="true" someOtherFeatureParameter="42"/>
</license>
<license>
<hardwareId>someValue</hardwareId>
<serial>123456789</serial>
<feature1 enabled="true" someOtherFeatureParameter="42"/>
</license>
一些价值
123456789
您可以将其放入一个普通的xml文件中,存储在机器的已知路径中(您的安装目录…用户配置文件…任何内容)
现在,虽然这是很好的和闪亮的,存储了所有与许可证相关的信息,但它并不能保护您免受恶意用户编辑(或首先创建)所述文件、启用他们没有付费的功能(甚至创建他们没有付费的许可证文件)的攻击
这和数字签名有什么关系。。。数字签名正是使篡改许可证变得更难的原因
将公钥嵌入到应用程序中,并将签名放在第二个文件中(或将签名与许可证一起放在xml文件中)
关于数字签名的问题是:
如果仅更改签名数据的一位,签名将无效
因此,应用程序所要做的就是验证签名是否有效,然后才获取许可证文件中的信息
要创建签名,您需要与签名将使用的公钥相对应的私钥。由于您的应用程序没有附带私钥,因此用户没有
当然,用一个新的公钥替换嵌入的publik密钥可能会破坏这个系统,但这比编辑一个文本/xml文件要费劲一些…公钥只能加密,您无法了解文件的实际上下文 但是,您可以在客户端应用程序中实现加密,每个clie,t都会生成自己的私钥和公钥 然后应用程序向服务器发送公钥请求,并向服务器发送自己的公钥(可能是加密的)。现在两者都只能对信息进行加密和解密。 您只需确保实现simething即可向客户端验证服务器
lg 那么,为什么必须对许可证进行加密呢?你们读过数字签名吗?谢谢回复,我在编辑部分添加了一些信息。谢谢回复,我在编辑部分添加了一些信息。