有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的javascript AES加密是什么模式?

我需要将一些代码从java移植到处理加密的javascript。给定相同的密钥,我无法按照现有代码复制相同的密码文本

我怀疑我不能找出正确的模式。附加代码段-

public String encrypt(String message, String enc_key) throws Exception {
    try {
        initEncrypt(enc_key);

        byte[] encstr = cipher.doFinal(message.getBytes());
        return HexUtil.HextoString(encstr);
    } catch (BadPaddingException nse) {
        throw new Exception("Invalid input String");
    }
}

public void initEncrypt(String key) throws Exception {
    try {
        skeySpec = new SecretKeySpec(HexUtil.HexfromString(key), "AES");
        cipher = Cipher.getInstance("AES");
        // cipher.
        cipher.init(1, skeySpec);
        System.out.println(cipher.getAlgorithm());
    } catch (NoSuchAlgorithmException nsae) {
        throw new Exception("Invalid Java Version");
    } catch (NoSuchPaddingException nse) {
        throw new Exception("Invalid Key");
    }
}

HexToString函数只转换字节数组中的十六进制字符串键

提供键-10663d0b39d73d614116f0b3cbebd666(十六进制) 纯文本-hello,我明白了- 密文-57C758B2B3A8580658A11DBD95109EC4

根据这个so答案,默认模式应该是AES/ECB/PKCS5Padding

但是当我尝试使用相同的值here加密时,我会得到密文-

3874350661ABB0B452A4960FE3953C18

我尝试过各种其他模式,但无法匹配密码文本。 任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    不要依赖默认行为如果您知道这些选项,请继续并指定它们。如果你不知道这些选项,那么去找出它们,然后指定它们

    这两封加密邮件都是用您的密钥加密的“hello”。。唯一的区别是不同的填充模式:

    57C758B2B3A8580658A11DBD95109EC4 decrypts to   68656c6c6f0b0b0b0b0b0b0b0b0b0b0b
                                                   h e l l o <  pkcs5 padding   >
    
    3874350661ABB0B452A4960FE3953C18 decrypts to   68656c6c6f0000000000000000000000
                                                   h e l l o <  zerro padding   >