2010-11-02 236 views
3

加密 - 这已解决 -RSA加密 - 用私钥

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

谢谢给bjarkef & Henk Holterman花时间向我解释这个彻底。

干杯

- 原单的问题 -

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

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

的这种想法是控制加密的数据,并且不关心谁可以读取它,只有谁就能创造它。

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

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

是否有任何其他加密提供,我可以用它来做到这一点,或阅读许可细节,因此我把私钥,并分发与我进行许可证验证程序的公钥一些其他的方法。

干杯

+3

“但是,如果一个邮件进行数字签名,签名后的消息中的任何改变都会使签名无效。” http://en.wikipedia.org/wiki/Digital_signature#Integrity。你确定签名不是你需要的吗? – steinar 2010-11-02 22:25:56

+4

您所描述的内容称为“签名”,即使您认为它不是。 – 2010-11-03 01:09:15

+0

我知道我可以签署一串数据,并且会验证数据来自我,但是,我正在使用该加密数据为许可证设置选项,IE并发用户。因此,虽然我可以签署原始数据(包含并发用户数),并发送纯文本数据,但无法比较这些值以确保其真实性。即:我将并发用户数作为纯文本发送,并且还包含一个包含加密用户数的字符串。然后我想要做的是取消加密并发用户值,并将其与纯文本值进行比较。 – Juzzbott 2010-11-03 01:54:15

回答

6

您需要签名。真。

整个签名API旨在签署哈希值,因为这样的哈希被用作提要RSA是缓慢的。这应该适合您的需求,您可以随时发送未加密的文本。您使用签名来验证它。

+0

但是,如果我用私钥签署数据,我是否也需要发送私钥,以便我可以重新散列并验证纯文本数据,如果没有它,我怎么能比较加密值? – Juzzbott 2010-11-03 01:48:15

+0

@Juzzbott:因为签名就是你描述的内容。签名是指用私钥进行加密,然后用公钥进行解密。是为了描述确切的含义:要验证内容没有被改变,并且作者是在私钥的情况下,只使用公钥。 – 2010-11-03 07:07:43

+1

@bjarkef:或者是我想使用SignHash的两个函数()和VerifyHash()从这个页面?http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.aspx – Juzzbott 2010-11-03 22:53:11