gpt4 book ai didi

java - javax.crypto.Cipher 可以为不同的提供者返回不同的结果吗?

转载 作者:行者123 更新时间:2023-12-02 05:04:00 25 4
gpt4 key购买 nike

当检索javax.crypto.Cipher实例时,您可以请求特定的提供者或让系统选择一个:

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding" /*, here may be Provider parameter*/);

是否可以保证省略提供者参数始终有效,并且在一个系统上加密的消息可以在另一个系统上解密?
或者,换句话说,提供者是否只负责实现,并且由提供者 A 加密的文本始终可以由提供者 B 解密?

最佳答案

您正在使用standard algorithm names ,所以代码将始终有效。如果比标准提供者具有更高优先级的另一个提供者实现相同的算法,则选择该提供者。但提供者在这里并不重要。

CBC mode 中的 AES 加密仅当参数 IV(初始化 vector )相同时,使用 PKCS#5 填充才会产生相同的结果。

您可以将 IV 传递给 init 方法,也可以让提供者为您生成随机 IV:

cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));

cipher.init(Cipher.ENCRYPT_MODE, secretKey); // random IV

可以通过调用getIV()查询随机IV:

byte[] iv = cipher.getIV();

只要您知道 IV,您就可以使用每个实现 AES/CBC/PKCS5Padding 的 JCE 提供程序甚至其他编程语言(例如带有 openssl 的 C)来解密结果。这就是加密标准的要点。

关于java - javax.crypto.Cipher 可以为不同的提供者返回不同的结果吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com