在.NET中签署程序集涉及公钥/私钥对。据我所知,.NET使用RSA算法和私钥对程序集进行签名,并使用嵌入式公钥进行检查。
我知道如何检索公钥(Assembly.PublicKey
)。我想知道,如果该密钥可用于解密包含一些使用私钥加密的数据的短字符串。
我到目前为止所阅读的文档(e.g.)似乎暗示只有相反的方式是可能的:我必须使用公钥加密和私钥解密 - 但我我真的不想在集会中加入它。我是。
我想如果我刚签了字符串就行了。但是如何?
我有点不知道如何开始这个。有没有人有代码片段?
此外,加密/签名小字符串理想情况下会发生在PHP中,因为我想将其卸载到Web服务器上,到目前为止我们所拥有的只是您的通用PHP / MySQL托管网站。
用例:我正在尝试为我们即将发布给beta测试人员的软件提供轻量级许可方案。由于该软件可能是免费软件,我们真正想要实现的是
能够加密元组(到期日期,指纹)并在启动时解密它将构成一个简单的许可模块:第一次启动应用程序时,会要求用户提供电子邮件地址,姓名和组织。此信息将与一些系统信息(计算机名称,程序集主要版本和次要版本)的md5指纹一起发布到Web服务器。网络服务器通过电子邮件(检查电子邮件地址的有效性)回复加密版本的元组(有效期,指纹),然后将其保存到磁盘。启动时,可以将其解密并与当前日期和重新生成的指纹进行比较。
编辑:好的,所以我还没有回答我的问题。但看起来.NET不会让使用私钥加密变得容易(如果可能的话,答案并不真正同意)。
我将采取的路线(基于我的用例):
sn.exe
生成)签署一些文本的问题非常感谢您的回答。
答案 0 :(得分:1)
您无法使用公钥解密。这样,“公共”的整个观点就会丢失。
(但是,您可以使用私钥对某些内容进行签名,然后使用公钥验证签名。这就是框架使用密钥的方式 - 程序集已签名,公钥用于验证签名。)
答案 1 :(得分:1)
这可以使用SignedXml http://msdn.microsoft.com/en-us/library/ms229745.aspx完成。在较低级别,您可以使用RSAPKCS1SignatureDeformatter和RSAPKCS1SignatureFormatter。这些工作通过加密数据的散列然后将数据与另一端的(解密的)散列进行比较。我相信使用散列是因为私钥加密只能处理小数据。不确定重用汇编公钥,如果它导致问题只需使用单独的密钥对。
警告,请查看这些,因为这些课程可能导致20秒的挂断! http://www.pcreview.co.uk/forums/thread-3428177.php
这种方法容易受到使用Reflexil篡改签名验证码的影响,但这是另一回事。
我写了以下内容但重新阅读我认为你已经得到了这个:你并没有真正尝试加密或隐藏用户的数据,你想阻止他们创建或篡改许可证。你是对的,可以使用公钥私钥加密算法。这称为使用私钥的签名(服务器端许可证生成)。并使用公钥验证签名(在应用程序中进行许可证检查)。我提到这个术语,因为它有助于研究。
答案 2 :(得分:0)
在RSA中,公钥用于加密,私钥用于解密。你不能使用公钥解密任何东西......
答案 3 :(得分:0)
不在.NET中。
在许多传统的公钥加密算法中,如RSA,你可以加密和解密两种方式,通常一种方式称为“加密”,另一种方式称为“签名”,即使你实际上最终得到了加密版本的东西两种方式。
但是,在.NET中,RSA实现已经瘫痪,签名时只会生成输入的摘要,而不是完整处理的信息。
似乎对使用RSA可以做什么和不可以做什么有一些分歧,所以让我编辑我的答案更具体。
我说的是RSA数学,而不是任何特定的RSA实现。
RSA math允许您对两个键(私有或公共)中的信息进行编码,并且编码数据只能使用两个键中的另一个进行解码。
通常,您使用公钥进行编码,加密信息,并使用私钥对其进行解码,然后解密信息。或者,您获取信息的哈希值,使用私钥对其进行编码,对哈希进行签名,并使用公钥对哈希进行解码,以便比较和验证签名。
典型的实现不允许人们对私有到公共的数据进行完全编码,只能通过散列数据,但 RSA背后的数学完全允许这个。
答案 4 :(得分:0)
在RSA中,公钥和私钥之间唯一的实际区别在于您保密。
因此,您可以使用公钥作为加密密钥并使用私钥解密,或使用私钥作为加密密钥并使用公钥解密。
使用私钥加密用于数字签名(任何人都可以使用公钥解码)。
但正如@Lasse V. Karlsen指出的那样,.Net可能会让它变得更加困难......
答案 5 :(得分:-1)
警告!这个答案是错误的,但我会把它留在这里,因为所附的一系列评论是,我认为其他人有足够的兴趣来保持答案。好吧,这让我看起来像个白痴,但这对我来说并不新鲜;)投票如你所愿。
公钥可用于: -
它不能用于解密由私钥加密的内容。因此,公钥/私钥系统被称为非对称系统。
答案 6 :(得分:-1)
我认为这两个方向都可以用public加密,用private解密,用私钥加密。第二个是数字签名的工作方式。