你能帮我指出什么是默认的RSA填充吗?
准确地说,如果我像下面这样创建cipher实例,就可以确定java正在使用某种类型的填充作为加密文本字节长度始终显示256字节的2048 RSA密钥,而不管纯文本是1个字符还是10个字符。
Cipher.getInstance("RSA") 我想知道如果在Cipher.getInstance("RSA")中没有指定填充,java内部使用的默认填充是什么。那是PKCS#1 v1.5吗?
谢谢,山姆
发布于 2014-01-12 09:46:47
这与"RSA/ECB/PKCS1Padding"相同,ECB有点用词不当,因为它不实现块密码操作模式(它不处理大于“块大小”的明文)。"RSA/None/PKCS1Padding"可能是一个更好的名称或"RSA/None/RSASSA-PKCS1-v1_5",因为您对填充机制的猜测是正确的。
这意味着它使用较旧的加密模式;OAEP更能抵御攻击,并包含安全证明。不幸的是,OAEP当然不能成为新的默认值,因为所有现有的密文将不再解密。这就是为什么使用默认设置首先是愚蠢的原因之一。
PKCS#1 v1.5填充还意味着输入被限制为密钥大小减去11字节的最大值。请注意,生成的密文的大小始终与PKCS#1中的密钥大小相同;即使生成的整数较小,也将使用零字节进行填充。这里我假设密钥大小是8的倍数。
您不应该依赖算法规范的默认值。这使得代码更难理解,而且每个提供商的默认值可能确实不同(尽管大多数提供商都会尝试遵循Oracle的做法,以避免不兼容)。因此,只需使用它来了解在现有代码中配置了哪个算法。在我看来,平台默认唯一有意义的地方是SecureRandom。
https://stackoverflow.com/questions/21066902
复制相似问题