c# - 我可以使用程序集 PublicKey 来解密用相应的 PrivateKey 加密的字符串吗?

标签 c# php rsa encryption-asymmetric license-key

在 .NET 中签署程序集涉及公钥/私钥对。据我所知,.NET 使用 RSA 算法和私钥对程序集进行签名,并使用嵌入的公钥对其进行检查。

我知道如何检索公钥 (Assembly.PublicKey)。我想知道,是否可以使用该 key 来解密包含一些用私钥加密的数据的短字符串。

到目前为止我读过的文档 ( e.g. ) 似乎暗示只有相反的方式是可能的:我将不得不使用公钥加密和私钥解密 - 但我不这样做我真的不想在程序集中包含它,是吗?

我想如果我只是在字符串上签名就可以了。但是如何呢?

我有点不知如何开始。有人有代码片段吗?

此外,小字符串的加密/签名最好在 PHP 中进行,因为我想将其卸载到 Web 服务器,而我们目前所拥有的只是您的通用 PHP/MySQL 托管网站。

用例:我正在尝试为我们即将发布给 Beta 测试人员的软件制定一个轻量级许可方案。由于软件可能是免费软件,我们真正想要实现的是

  1. 知道谁安装了软件(电子邮件地址)
  2. 让软件在给定的期限后过期,之后用户必须获得新的许可证
    • 这就像填写表格并等待包含 key 的自动电子邮件送达一样简单
    • 我们正在努力减少旧版本回来损害我们声誉/困扰我们的可能性

能够加密一个元组(过期日期、指纹)并在启动时对其进行解密将创建一个简单的许可模块:应用程序首次启动时,系统会要求用户提供电子邮件地址、姓名、组织。此信息与一些系统信息(nic、计算机名称、程序集主要版本和次要版本)的 md5 指纹一起发布到网络服务器。网络服务器通过电子邮件回复(检查电子邮件地址的有效性),并使用元组的加密版本(到期日期、指纹),然后将其保存到磁盘。在启动时,这可以被解密并与当前日期和重新生成的指纹进行比较。

编辑:好的,所以我还没有得到我的问题的所有答案。但看起来 .NET 不会让使用私钥进行加密变得容易(如果可能的话,答案并不完全同意)。

我将采取的路线是这样的(基于我的用例):

  • 我将使用私钥签署许可证。
  • 我将使用公钥来验证许可证是由私钥签署的
  • 我将针对 PHP 开发人员发布另一个关于如何使用 .NET key (由 sn.exe 生成)签署一些文本的问题
  • 我真的不担心用户会看到许可证,因为无论如何它都是一个散列,并且是根据他已经知道的东西计算出来的。我想要的只是让典型的建筑建筑师在我不知情的情况下复制我的软件变得太难了(记住,该软件将是免费软件 - 我想要的只是谁安装了它的书面记录...... )

非常感谢您的回答。

最佳答案

您不能使用公钥解密。那样的话,“公共(public)”的意义就没有了。

(但是,您可能能够使用私钥签署某些内容,然后使用公钥验证签名。这就是框架使用 key 的目的 - 程序集已签名,公钥用于验证签名。)

关于c# - 我可以使用程序集 PublicKey 来解密用相应的 PrivateKey 加密的字符串吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847357/

相关文章:

c# - 如何使用 Visual Studio 2010 在 IIS 8.0 中部署 WCF Web 服务?

javascript - 如何在 Yii 页面上使用 JavaScript 和 CHtml 按钮()

针对 MySQL 的 PHP 用户名验证

python - 如何在 python 中翻译 RSA 公钥的 Perl 代码?

c# - Entity Framework Core 与 WPF Core - 无法添加迁移

c# - 如何避免用不同的方法重写相同的代码

PHP 是命名空间或全局的包含类的一部分吗?

java - RSA OAEP、Golang 加密、Java 解密 -BadPaddingException : Decryption error

Swift 从私钥获取 RSA 公钥?

c# - .Net 观察者模式改变。这些是什么时候发生的,为什么?