Encryption 非对称加密中加密和签名的区别是什么?

Encryption 非对称加密中加密和签名的区别是什么?,encryption,rsa,signing,license-key,Encryption,Rsa,Signing,License Key,加密某些数据与签署某些数据(使用RSA)之间有什么区别 它是否只是颠倒了公私密钥的作用 例如,我想使用我的私钥生成消息,因此只有我可能是发件人。我希望我的公钥用于读取消息,我不在乎谁读取它们。我希望能够加密某些信息,并将其用作软件的产品密钥。我只在乎我是唯一一个能创造这些的人。我想在我的软件中包含我的公钥,以解密/读取密钥的签名。我不关心谁可以读取密钥中的数据,我只关心我是唯一可以生成这些数据的可验证的人 签名在这种情况下有用吗?签名是用您的私钥生成一个“哈希”,可以用您的公钥进行验证。文本以明

加密某些数据与签署某些数据(使用RSA)之间有什么区别

它是否只是颠倒了公私密钥的作用

例如,我想使用我的私钥生成消息,因此只有我可能是发件人。我希望我的公钥用于读取消息,我不在乎谁读取它们。我希望能够加密某些信息,并将其用作软件的产品密钥。我只在乎我是唯一一个能创造这些的人。我想在我的软件中包含我的公钥,以解密/读取密钥的签名。我不关心谁可以读取密钥中的数据,我只关心我是唯一可以生成这些数据的可验证的人

签名在这种情况下有用吗?

签名是用您的私钥生成一个“哈希”,可以用您的公钥进行验证。文本以明文形式发送

加密使用接收方的公钥对数据进行加密;解码是用他们的私钥完成的


因此,密钥的使用不会逆转(否则您的私钥将不再是私钥!)。

从功能上讲,您使用公钥/私钥加密来确保只有接收者才能读取您的消息。消息使用接收方的公钥加密,并使用接收方的私钥解密

您可以使用签名让接收者知道您创建了消息,并且消息在传输过程中没有更改。消息签名是使用您自己的私钥完成的。接收者可以使用您的公钥检查消息是否被篡改

至于使用的算法:这涉及到一个单向函数。第一个这样的算法使用大素数,但此后发明了更多的单向函数


搜索“Bob”、“Alice”和“Mallory”可以在互联网上找到介绍文章。

是的,将签署数据视为给它自己的蜡像,其他人没有。这样做是为了实现完整性和不可否认性。加密是为了让其他人看不到数据。这样做是为了实现机密性。参见维基百科


签名是使用您的私钥签名的邮件的散列。

加密时,您使用他们的公钥编写邮件,他们使用他们的私钥读取邮件

签名时,您使用您的私钥来编写邮件签名,他们使用您的公钥来检查它是否真的是您的

我想使用我的私钥来生成消息,因此只有我可能是发件人

我希望我的公钥用于读取消息,我不在乎谁读取它们

这是签名,使用您的私钥完成

我希望能够加密某些信息,并将其用作软件的产品密钥

我只在乎我是唯一一个能创造这些的人

如果你只需要知道它自己,你不需要弄乱钥匙来做这件事。您可以生成随机数据并将其保存在数据库中

但是如果你想让人们知道这些密钥实际上是你的,你需要生成随机数据,在其中保存一个数据库,并用你的密钥签名

我想在我的软件中包含我的公钥,以解密/读取密钥的签名


您可能需要从商业提供商(如Verisign或Thawte)购买公钥证书,以便人们可以检查是否有人伪造了您的软件并用他们的公钥替换了您的公钥。

您正在准确描述签名在公钥加密中的使用方式和原因。请注意,对他人提供的算术消息进行签名(或加密)是非常危险的-这会允许攻击可能会危害您的密钥的算法。

在RSA crypto中,当您生成密钥对时,选择哪一个作为公钥,哪一个作为私钥完全是任意的。如果你用一个加密,你可以用另一个解密——它可以双向工作

因此,很容易看出如何使用接收方的公钥对消息进行加密,以便接收方可以使用其私钥对其进行解密

签名是签名者拥有与某个公钥匹配的私钥的证明。要做到这一点,用发送者的私钥对消息进行加密就足够了,并将加密版本与明文版本一起包括在内。要验证发送方,请解密加密版本,并检查它是否与明文相同

当然,这意味着你的信息不是秘密。任何人都可以解密它,因为公钥是众所周知的。但当他们这样做时,他们已经证明密文的创建者拥有相应的私钥

然而,这意味着将传输的大小增加一倍——明文和密文加在一起(假设您希望对验证签名不感兴趣的人阅读消息)。所以,通常通过创建明文的散列来创建签名。重要的是不能创建假散列,因此使用了加密散列算法,如SHA-2

因此:

  • 要生成签名,请从明文中生成哈希,用私钥加密,并将其与明文一起包含
  • 要验证签名,请对明文进行哈希,用发送方的公钥解密签名,检查两个哈希是否相同

在您的场景中,您没有按照非对称加密的含义进行加密;我宁愿叫它“编码”

因此,您将数据编码为某种二进制表示形式,然后使用私钥签名。如果无法通过公钥验证签名,则知道签名数据不是使用私钥生成的。(“验证”表示未签名的数据没有意义)EM = 0x00 || 0x02 || PS || 0x00 || M.