加密如何在RSA密码系统中工作

时间:2012-07-13 19:12:46

标签: cryptography rsa

我理解RSA密码系统是如何工作的,但我不理解的是,在算法http://en.wikipedia.org/wiki/RSA_%28algorithm%29中,我们将加密的消息发送给另一个人。通常我们把字符串写成meesage。我想知道这个字符串是如何转换为数字的。我在互联网上随处可见人们在所有例子中都将这条消息称为数字。但是我们不正常发送数字,我们发送字符串作为消息。我想知道这个字符串是如何转换成数字的。我的意思是我知道如何转换字符串的数量,但在加密视图中如何将此消息转换为数字?

3 个答案:

答案 0 :(得分:1)

好的,所以这基本上是关于编码/解码的问题。

首先,正如您所写的那样,消息通常以编程语言表示为字符串。字符串由“代码点”组成,可以表示为文本。要以字节为单位创建二进制表示,您需要对字符串进行字符编码,例如使用UTF-8编码。在某些语言中,“代码点”已经使用默认的内部编码(例如C中的ASCII)。

您现在可以将字符串的二进制编码解释为整数。第一个字节是整数的最高(最重要)部分,最后一个是最不重要的部分。所以现在你得到了RSA操作的一些数字输入。不幸的是,这是不安全的,它无法处理大于密钥大小的消息。

因此,不使用直接编码文本,而是使用安全加密哈希(如SHA-256)对文本进行哈希处理。 SHA-256输出32字节的哈希值。然后使用诸如PKCS#1 v1.5中定义的安全填充方案来填充该哈希。其结果现在转换为数字(见上文)并使用私有RSA密钥加密。

RSA加密的输出也是一个数字。此数字再次转换为字节(与填充哈希中使用的早期函数相反)。现在你有了名为签名的二进制数据。最后,如果你想把它作为文本发送,你必须再次编码;通常使用base 64编码或十六进制。

要验证您是否执行相同操作,但顺序相反并使用公钥而不是私钥。您需要比较哈希值以检查验证是成功还是失败。

答案 1 :(得分:1)

秘密消息不必总是字符串。但如果是这样的话,字符串的二进制编码可以分成块,其十进制表示可以使用RSA加密。

通常,非对称密钥密码术是基于将数学函数应用于数字,因此不如基于排列和替换的对称密钥密码术快。

因此,它主要用于身份验证和数字签名,其中秘密消息不是字符串,而是一些数字。

请参阅Forouzan的“密码学和网络安全”。第章 - 非对称密钥密码学。

答案 2 :(得分:0)

公钥加密速度很慢,但允许我们在公共场所安全地交换少量信息。

密钥加密速度很快,但必须首先私密共享密钥。

通常,可以使用RSA加密密钥(如AES或RC4密钥)以允许我们公开发送该密钥,然后使用该密钥加密实际消息以利用其速度秘密密钥加密。

RSA也可用于签名消息,但实际用RSA签名的是实际数据的散列(如MD5,SHA-1,SHA-256)。

通常使用Diffie-Hellman代替RSA来交换密钥。

这个答案是否足够,或者您是否需要知道密钥加密和散列如何查看数据呢?