当前位置: 首页 > 面试题库 >

RSA可以加密的数据量有什么限制?

爱刚捷
2023-03-14
问题内容

通常,建议将RSA用于加密对称密钥,然后再将其用于加密“有效负载”。

可以使用RSA加密的数据量的实际(或理论)限制是多少(我使用的是2048位RSA密钥大小)。

特别是,我想知道使用(不同的)RSA公钥加密RSA公钥(256字节)是否安全?我在Java中使用Bouncy Castle加密库。


问题答案:

对于 n 位RSA密钥,直接加密(使用PKCS#1
“旧式”填充)适用于最大 下限(n / 8)-11
字节的任意二进制消息。换句话说,对于1024位RSA密钥(128个字节),最大为117个字节。使用OAEP(PKCS#1“新型”填充),这要少得多:OAEP使用哈希函数,其输出长度为
h 位;这意味着 floor(n / 8)-2 * ceil(h / 8)-2
的大小限制:仍然对于1024位RSA密钥,使用SHA-256作为哈希函数( h = 256 ),这意味着二进制消息最多60个字节。


用另一个RSA密钥加密RSA密钥是没有问题的(使用字节加密 任何 字节序列,无论这些字节代表什么都没有问题),但是,当然,“外部”
RSA密钥必须更大:使用旧式填充,要加密256字节的消息,您将需要一个至少2136位模数的RSA密钥。

但是,通常建议采用混合模式(使用随机对称密钥加密数据并使用RSA加密对称密钥),因为这是因为它们没有任何实际的大小限制,并且因为它们使替换RSA更容易部分使用另一种密钥交换算法(例如Diffie-
Hellman)。



 类似资料:
  • 我的问题是: 我的加密代码在64个字符以下运行良好。但如果超过64个字符,我会得到以下错误 加密代码 密钥生成代码 我的问题是: 可以用512位密钥加密大文本吗?我的密码有错吗? 注意:如果有人想要完整的代码,我会稍后更新。

  • 我用RSA加密来加密C#中的一些数据。现在我想用Java解密加密的数据。但是我遇到了一些问题。 主要问题可能是将加密消息从c#获取到java。在c#中,我们有无符号字节,字节序是不同的 因此,为了进行测试,我将c#中加密数据的数组转换为数组并获得它的字符串表示形式。然后我将字节数组的字符串表示形式复制到我的java代码中并将其转换回“字节”数组。之后,我反转数组以匹配java的endianess。

  • 一些遗留Java使用名为jasypt的包加密密码。 它使用加密密码。 示例明文密码为: 盐为: 加密密码为: 下面是Java代码中实际加密密码的片段:

  • 在本章中,我们将重点介绍RSA密码加密的不同实现及其所涉及的功能。 您可以引用或包含此python文件以实现RSA密码算法实现。 加密算法包含的模块如下 - from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_OAEP from Crypto.Signature import PKCS1_v1_5 from Crypto

  • 我正在尝试在我的C#程序中实现RSA加密。 这是我的代码: 我收到这个错误代码: <代码>系统。安全密码学。CryptographicException:“错误数据。” 这一行给出了错误:

  • 我有一些加密的私钥和密码短语,我想加载进去。NET没有OpenSSL,但我很难找到它们的格式和规范。 我可以解析和解码来自PEM的二进制数据,最初我以为我会得到PKCS#8,但事实似乎并非如此。 创建它们的OpenSSL命令是生成如下文件: 据我所知,Base64编码的数据是无效的DER/ASN,我找到的工具只是说数据是无效的,包括openssl asn1parse-通知PEM...我假设这两个“