gpt4 book ai didi

java - 如何使用Android AES加密与coldfusion加密相同

转载 作者:行者123 更新时间:2023-12-02 18:18:15 34 4
gpt4 key购买 nike

我们在网络上使用 coldfusion encrypt 方法。

Encrypt(plainText, key, "AES", "Hex")

Android 中,我们按以下方式使用加密方法:

public static String aesEncryption(String plainText, String key) {
try {
SecretKey secKey = new SecretKeySpec(key.getBytes(), "AES");
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
aesCipher.update(plainText.getBytes());
byte[] cipherText = aesCipher.doFinal();
return bytesToHex(cipherText);
} catch (NoSuchAlgorithmException | InvalidKeyException | NoSuchPaddingException | BadPaddingException | IllegalBlockSizeException e) {
e.printStackTrace();
}
return null;
}


private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();

public static String bytesToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_ARRAY[v >>> 4];
hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
}
return new String(hexChars);
}

但是在 Android 中加密的输出不匹配,如何使用 Android AES 加密与 coldfusion encrypt

最佳答案

AES指定为算法时,Coldfusion的加密默认使用AES/ECB/PKCS5填充[1] 。在 Java/Android 中,如果仅指定 AES,则提供程序决定使用哪种模式和填充 [2] ,但通常它也是 AES/ECB/PKCS5 填充(就像在我的机器上,Android 9,API 28)。因此,算法的规范可能不是原因。尽管如此,最好在 Java 代码中使用完整规范 AES/ECB/PKCS5Padding,而不是 AES

Coldfusion 代码中的 key 可能在 Java 代码中使用不正确。在 Coldfusion 中, key 通常使用 generateSecretKey [3] 生成。它返回 Base64 编码的 key 。这意味着在 Android 代码中, key 首先必须使用 Base64 进行解码:

SecretKey secKey = new SecretKeySpec(Base64.decode(key, Base64.DEFAULT), "AES");

此外,如果 key 是为 AES-128 生成的,则不会引发异常,因为 key 长度为 16 个字节,而 Base64 编码仅 24 个字节,在当前的 Android 代码中将生成相同长度的 AES key ,因为的

SecretKey secKey = new SecretKeySpec(key.getBytes(), "AES"); 

因此,将使用 AES-192 而不是 AES-128,当然会产生不同的密文。

更新:正如评论中已经提到的,ECB 是一种不安全的操作模式,不应使用 [4] 。更安全的替代方案是 CBC [5] ,Java/Android 和 Coldfusion 均支持 [6] 。 GCM 更加安全和现代,它是一种经过身份验证的加密算法,可保证数据的真实性和 secret 性 [7] ,如果支持的话,应该是首选。这里可以找到更多模式的描述 [8] .

关于java - 如何使用Android AES加密与coldfusion加密相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59496573/

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