- 这已经解决了 -
我已经想出了如何做到这一点,并写了一篇快速文章,解释我是如何做到这一点的:http://juzzbott.com/2010/11/signing-and-verifying-data-within-csharp-encrypting-with-private-key-sort-of/
感谢bjarkef& Henk Holterman花时间向我解释这一点。
干杯
- 原始问题 -
我正在寻找一种使用私钥加密数据的方法,并让公钥解密。我知道这通常不是你想要的加密,因为任何拥有公钥的人都可以阅读,但这正是我的要求。
我需要通过私钥加密一串数据,这样我才能创建加密数据,并让我的应用程序通过公钥读取它。这背后的想法是为我的应用程序创建许可证文件,加密许可证详细信息,并让应用程序读取此数据。这将阻止许可证由我以外的任何人生成,但是允许应用程序通过公钥读取它。
这样做的想法是控制加密数据,而不关心谁可以读取它,只关心谁可以创建它。
使用RSACryptoServiceProvider,我可以创建我的公钥/私钥,我可以使用私钥加密数据,但是当我使用公钥解密时,我会收到“未找到密钥”异常。
使用RSA签名也是不可能的,因为我需要将加密数据与纯文本数据进行比较,以确保许可证有效,并且签名仅验证源,而不是它包含的内容。
我是否可以使用其他加密提供程序来完成此操作,或者其他一些读取许可证详细信息的方法,即保留私钥,并将公钥与我的应用程序一起分发以进行许可证验证。
干杯
答案 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);