Java SUN JCE/Oracle JCE中的默认RSA填充

Java SUN JCE/Oracle JCE中的默认RSA填充,java,cryptography,jce,Java,Cryptography,Jce,你能帮我指出什么是默认的RSA填充吗 确切地说,如果我像下面那样创建密码实例,那么java肯定在使用某种填充,因为加密文本字节长度总是显示2048 RSA密钥的256字节,而不管纯文本是1个字符还是10个字符 Cipher.getInstance("RSA") 我想知道,如果Cipher.getInstance(“RSA”)中没有指定填充,java内部使用的默认填充是什么。那是PKCS 1 v 1.5吗 谢谢, Sam它与中的“RSA/ECB/PKCS1Padding”相同,其中ECB有点

你能帮我指出什么是默认的RSA填充吗

确切地说,如果我像下面那样创建密码实例,那么java肯定在使用某种填充,因为加密文本字节长度总是显示2048 RSA密钥的256字节,而不管纯文本是1个字符还是10个字符

Cipher.getInstance("RSA")  
我想知道,如果Cipher.getInstance(“RSA”)中没有指定填充,java内部使用的默认填充是什么。那是PKCS 1 v 1.5吗

谢谢, Sam

它与
中的“RSA/ECB/PKCS1Padding”
相同,其中ECB有点用词不当,因为它没有实现分组密码操作模式(它不处理大于“块大小”的明文)
“RSA/None/PKCS1添加”
会是一个更好的名称,或者
“RSA/None/RSASSA-PKCS1-v1_5”
,因为您对填充机制的猜测是正确的

这意味着它使用较旧的加密模式;OAEP更能抵御攻击,并包含安全证明。不幸的是,OAEP当然不能成为新的默认值,因为所有现有密文将不再解密。这就是为什么使用默认设置首先是愚蠢的原因之一

PKCS#1v1.5填充还意味着输入限制为密钥大小减去11字节的最大值。请注意,生成的密文的大小始终与PKCS#1中的密钥大小相同;即使得到的整数更小,也将用零字节填充。我在这里假设密钥大小是8的倍数

算法规范不应依赖默认值。这使得代码更难理解,而且每个提供者的默认值可能确实有所不同(尽管大多数提供者会尝试效仿Oracle,以避免不兼容)。因此,使用此选项仅了解在现有代码中配置了哪个算法。在我看来,平台默认值唯一有意义的地方是
SecureRandom