【问题标题】:RSA Encryption - Encrypt with private keyRSA 加密 - 使用私钥加密
【发布时间】:2010-11-02 22:20:11
【问题描述】:

我正在寻找一种使用私钥加密数据并让公钥解密的方法。我知道这通常不是您想要的加密,因为任何拥有公钥的人都可以读取它,但这正是我所需要的。

我需要用私钥加密一串数据,这样只有我才能创建加密数据,并让我的应用程序用公钥读取它。这背后的想法是为我的应用程序创建一个许可证文件,加密许可证详细信息,并让应用程序读取这些数据。这将防止除我之外的任何人生成许可证,但将允许应用程序通过公钥读取它。

这样做的想法是控制加密数据,而不关心谁可以读取它,只关心谁可以创建它。

使用 RSACryptoServiceProvider,我可以创建我的公钥/私钥,我可以使用私钥加密数据,但是当我使用公钥解密时,我会收到“找不到密钥”异常。

使用 RSA 签名也是不可能的,因为我需要将加密数据与纯文本数据进行比较,以确保许可证有效,并且签名仅验证源,而不是它包含的内容。

是否有任何其他加密提供程序可以用来完成此操作,或者使用其他读取许可证详细信息的方法,从而我保留私钥,并将公钥与我的应用程序一起分发以进行许可证验证。

干杯

【问题讨论】:

  • "但是,如果消息经过数字签名,则签名后消息中的任何更改都会使签名无效。" en.wikipedia.org/wiki/Digital_signature#Integrity。您确定不需要签名吗?
  • 你描述的叫“签名”,虽然你说不是。
  • 我知道我可以签署一串数据,这将验证数据来自我,但是,我正在使用该加密数据来设置许可证选项,即 IE 并发用户。因此,虽然我可以对原始数据(包含并发用户数)进行签名,并将纯文本数据连同它一起发送,但无法比较这些值以确保其真实性。即:我将并发用户计数作为纯文本发送,以及一个包含加密用户计数的字符串。然后我要做的是解密并发用户值,并将其与纯文本值进行比较。
  • @Juzzbott:因为散列与公钥或私钥无关,它只是一个没有任何密钥的散列算法。这意味着您始终可以从纯文本转到散列(但不能反过来,这是散列的全部点)。因此,您获取纯文本许可证文件,对其进行哈希处理并使用您的私钥加密该哈希(即签名)。然后,您的软件可以通过使用公钥解密散列值来验证许可证,然后对明文许可证执行相同的散列函数,并比较两个散列值(即验证签名)。
  • @Juzzbott,您文章的链接返回 404。:(

标签: c# .net cryptography


【解决方案1】:

您需要签名。真的。

整个签名 API 旨在对哈希值进行签名,因为 RSA 很慢,所以哈希用作概要。这应该适合您的需求,您可以随时发送未加密的文本。您使用签名来验证它。

【讨论】:

  • 但是如果我使用私钥对数据进行签名,我是否不需要同时发送私钥,这样我就可以重新散列并验证纯文本数据。没有它我怎么能比较加密的值?
  • @Juzzbott:因为签名正是您所描述的。签名意味着用私钥加密,用公钥解密。签名是为了您描述的确切目的:验证内容没有被更改,并且作者拥有私钥,仅使用公钥。
  • @bjarkef:或者我想从这个页面使用 SignHash() 和 VerifyHash() 的两个函数? msdn.microsoft.com/en-us/library/…
  • @Juzzbot:是的,这正是您所需要的。您必须自己管理“数据”的传输,但这并不重要。
【解决方案2】:

我正在寻找一种使用私钥加密数据并让公钥解密的方法。我知道这通常不是您想要的加密,因为任何拥有公钥的人都可以读取它,但这正是我所需要的。

“使用私钥加密” 不是有效的加密转换。您遇到问题的原因是,库不支持它,因为它不是有效的加密转换。

在这种情况下,您通常希望使用带有恢复的签名方案 (PSSR)。


这背后的想法是为我的应用程序创建一个许可证文件,加密许可证详细信息,并让应用程序读取这些数据。这将防止除我之外的任何人生成许可证,但是将允许应用程序通过公钥读取它。

从数据安全的角度来看,您只需签署许可证详细信息,而不是“加密许可证详细信息”。其他人 [仍然] 将无法签署新的许可证,而被许可人将能够使用公钥进行验证。


使用 RSA 签名也是不可能的,因为我需要将加密数据与纯文本数据进行比较,以确保许可证有效,并且签名仅验证源,而不是它包含的内容。

我不太了解这一点。没有意见...


是否有任何其他加密提供程序可以用来完成此操作,或者使用其他读取许可证详细信息的方法,从而我保留私钥,并将公钥与我的应用程序一起分发以进行许可证验证。

我不知道 Microsoft 或 .Net 是否提供带有恢复功能的签名方案。

如果您对其他库持开放态度,那么 Botan 和 Crypto++ 提供带有恢复功能的签名方案。一个简单的Wrapper DLL 和互操作应该可以正常工作。

在 Crypto++ 中,您可以使用 Crypto++ wiki 上 RSA Signature Schemes 中的类似内容。 PSSR 是具有恢复的概率签名方案。

RSASS<PSSR, SHA256>::Signer signer(privateKey);
RSASS<PSSR, SHA256>::Verifier verifier(publicKey);

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 2013-05-07
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多