RSA加密 - 使用私钥加密

时间:2010-11-02 22:20:12

标签: c# .net cryptography

- 这已经解决了 -

我已经想出了如何做到这一点,并写了一篇快速文章,解释我是如何做到这一点的:http://juzzbott.com/2010/11/signing-and-verifying-data-within-csharp-encrypting-with-private-key-sort-of/

感谢bjarkef& Henk Holterman花时间向我解释这一点。

干杯

- 原始问题 -

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

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

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

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

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

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

干杯

2 个答案:

答案 0 :(得分:6)

您需要签名。真。

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

答案 1 :(得分:-1)

  

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

“使用私钥加密” 不是有效的密码转换。您遇到麻烦的原因是,图书馆不支持它,因为这不是有效的密码转换。

在这种情况下,通常需要使用具有恢复功能的签名方案(PSSR)。


  

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

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


  

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

我不太关注这个。没有评论...


  

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

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

如果您对其他库开放,则Botan和Crypto ++提供具有恢复功能的签名方案。简单的Wrapper DLL和Interop应该可以正常工作。

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

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