【发布时间】:2010-11-02 22:20:11
【问题描述】:
我正在寻找一种使用私钥加密数据并让公钥解密的方法。我知道这通常不是您想要的加密,因为任何拥有公钥的人都可以读取它,但这正是我所需要的。
我需要用私钥加密一串数据,这样只有我才能创建加密数据,并让我的应用程序用公钥读取它。这背后的想法是为我的应用程序创建一个许可证文件,加密许可证详细信息,并让应用程序读取这些数据。这将防止除我之外的任何人生成许可证,但将允许应用程序通过公钥读取它。
这样做的想法是控制加密数据,而不关心谁可以读取它,只关心谁可以创建它。
使用 RSACryptoServiceProvider,我可以创建我的公钥/私钥,我可以使用私钥加密数据,但是当我使用公钥解密时,我会收到“找不到密钥”异常。
使用 RSA 签名也是不可能的,因为我需要将加密数据与纯文本数据进行比较,以确保许可证有效,并且签名仅验证源,而不是它包含的内容。
是否有任何其他加密提供程序可以用来完成此操作,或者使用其他读取许可证详细信息的方法,从而我保留私钥,并将公钥与我的应用程序一起分发以进行许可证验证。
干杯
【问题讨论】:
-
"但是,如果消息经过数字签名,则签名后消息中的任何更改都会使签名无效。" en.wikipedia.org/wiki/Digital_signature#Integrity。您确定不需要签名吗?
-
你描述的叫“签名”,虽然你说不是。
-
我知道我可以签署一串数据,这将验证数据来自我,但是,我正在使用该加密数据来设置许可证选项,即 IE 并发用户。因此,虽然我可以对原始数据(包含并发用户数)进行签名,并将纯文本数据连同它一起发送,但无法比较这些值以确保其真实性。即:我将并发用户计数作为纯文本发送,以及一个包含加密用户计数的字符串。然后我要做的是解密并发用户值,并将其与纯文本值进行比较。
-
@Juzzbott:因为散列与公钥或私钥无关,它只是一个没有任何密钥的散列算法。这意味着您始终可以从纯文本转到散列(但不能反过来,这是散列的全部点)。因此,您获取纯文本许可证文件,对其进行哈希处理并使用您的私钥加密该哈希(即签名)。然后,您的软件可以通过使用公钥解密散列值来验证许可证,然后对明文许可证执行相同的散列函数,并比较两个散列值(即验证签名)。
-
@Juzzbott,您文章的链接返回 404。:(
标签: c# .net cryptography