Cryptography RSA密码系统中加密的工作原理

Cryptography RSA密码系统中加密的工作原理,cryptography,rsa,Cryptography,Rsa,我了解RSA密码系统是如何工作的,但我不明白的是,在算法中,我们向另一个人发送加密消息。通常我们把字符串写成meesage。我想知道这个字符串是如何转换成数字的。我在互联网上到处都能看到人们在所有例子中都以数字的形式提到这条信息。但我们通常不发送数字,而是发送字符串作为消息。我想知道这个字符串是如何转换成数字的。我的意思是我知道如何转换数字中的字符串,但在加密视图中,如何将此消息转换为数字 公钥加密非常缓慢,但允许我们在公共场合安全地交换少量信息 私钥加密是快速的,但密钥必须首先以私有方式共享

我了解RSA密码系统是如何工作的,但我不明白的是,在算法中,我们向另一个人发送加密消息。通常我们把字符串写成meesage。我想知道这个字符串是如何转换成数字的。我在互联网上到处都能看到人们在所有例子中都以数字的形式提到这条信息。但我们通常不发送数字,而是发送字符串作为消息。我想知道这个字符串是如何转换成数字的。我的意思是我知道如何转换数字中的字符串,但在加密视图中,如何将此消息转换为数字

公钥加密非常缓慢,但允许我们在公共场合安全地交换少量信息

私钥加密是快速的,但密钥必须首先以私有方式共享

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

RSA也可以用于对消息进行签名,但实际上使用RSA签名的是实际数据的散列(如MD5、SHA-1、SHA-256)

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


这个答案够了吗?或者你需要知道密钥加密和散列如何查看数据吗?

好的,这基本上是一个关于编码/解码的问题

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

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

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

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


要验证,请执行相同的操作,但顺序相反,并使用公钥而不是私钥。您需要比较散列以检查验证是否成功。

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

一般来说,非对称密钥加密基于对数字应用数学函数,因此不如基于置换和替换的对称密钥加密速度快

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


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

计算机只理解1和0。。字符串以序列形式存储为1和0。。。而一系列的1和0通常是一个二进制数,如Kurose&Ross的《计算机网络自上而下的方法》一书所述。在第8章中,使用RSA Elgamal密码系统描述了加密过程。在标准文档中,这通常被描述为八位到整数以及整数到八位的转换。请参见中的章节和示例。