ssl - RSA 中的消息长度限制

标签 ssl rsa

在 RSA 中,消息长度不应超过 (keysize/8) 字节。为什么会有这样的限制?输入(比如“abcde”)在将其输入 RSA 算法之前转换成什么?它在哪里考虑输入字符串“abcde”的大小?

最佳答案

RSA算法本质上是:

Ciphertext = (Plaintext e) mod n

并解密:

Plaintext = (Ciphertext d) mod n

en 一起组成你的公钥, dn 组成你的私钥. e 通常是几个常见值之一,例如65537,n是两个大质数pq的乘积,应该是你唯一的,并且定义了 key 长度(例如1024位)。用于解密密文的d的值是使用epq计算的。如果您有兴趣,维基百科有更多详细信息:http://en.wikipedia.org/wiki/RSA_(algorithm) .在 RSA 算法中使用时,您的明文基本上被视为一个大整数。

如果您不熟悉模运算符,它基本上就是左侧除以右侧的余数。例如。 17 mod 5 = 2 因为 5 恰好将 17 除 3 次(3 * 5 = 15),余数为:17 - 15 = 2 >).

由于模运算符的定义,a mod b 的结果总是小于b。鉴于此,并且解密值是执行 mod n 操作的结果这一事实意味着解密时,生成的明文值将始终小于 n。因此,要使这成为您最初加密的实际明文,输入必须小于 n

为了保证这一点,消息的位数(“数字”)被限制为少于 n。由于 n 中的位数是 key 大小,因此它必须少于 keysize 位,或 keysize/8 字节(因为有一个字节中有 8 位)。

关于ssl - RSA 中的消息长度限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061626/

相关文章:

encryption - 在 Go 中使用 RSA 进行 key 交换的 AES 加密通信

php - 当用户更改其系统日期时,由于 SSL 证书无效,JS 无法正常工作

mod-rewrite - mod_rewrite : 2 files should always be SSL, 其余的总是 HTTP

javascript - Node.js Socket.io 聊天服务器 SSL

java - 将 openSSH rsa key 转换为 javax.crypto.Cipher 兼容格式

ios - RSA/ECB/PKCS1Padding iOS加密

php - 将 JavaScript RSA 函数转换为 PHP 函数

c# - 尝试使用 Python 从工作 C# 代码生成 RSA 签名

Android L - 没有对等证书

ssl - 是否可以将 Cloudflare TLS 证书用于不在 Internet 上的内部网站?