gpt4 book ai didi

java - 指定 Cipher.getInstance() 参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:47 25 4
gpt4 key购买 nike

我在一个 android 应用程序和一个独立的 java 应用程序中使用以下内容:

private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
...

我在 android 和我的独立 java 应用程序上得到不同的加密字符串(都使用相同的代码和 key )。我得到与这个问题相同的异常 (javax.crypto.BadPaddingException: Blocktype mismatch: 0):

RSA Encryption: Difference between Java and Android

建议的解决方案是指定填充策略,如:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");

但我使用的是“AES”,而不是“RSA”,我不确定如何结合 AES 指定填充。在这种情况下,我将如何构造传递给 Cipher.getInstance() 的字符串?我试了一下:

Cipher cipher = Cipher.getInstance("AES/PKCS1Padding");

但是得到一个关于无效的异常。

谢谢

最佳答案

另一个“简短答案”,但我相信 AES-GCM 比 CBC 模式更安全并且已经存在了几年,但是如果您想在 Android 中使用,您需要包含 spongycastle

Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");

关于java - 指定 Cipher.getInstance() 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11279903/

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