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

 握住每一缕光 发布于 2023-02-04 13:51

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

确切地说,如果我创建如下的密码实例,肯定java正在使用某种填充,因为加密的文本字节长度总是显示256字节的2048 RSA密钥,无论纯文本是一个字符还是10个字符.

Cipher.getInstance("RSA")  

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

谢谢,山姆

1 个回答
  • 它与"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在我看来,唯一一个平台默认有意义的地方.

    2023-02-04 13:53 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有