首页 > 解决方案 > Java AES解密十六进制

问题描述

我正在做一个项目,我需要在 Java 中解密 AES 加密。为了测试,我使用了一个在线计算器来加密“Hello World”,密钥为“0123456789ABCDEF”和一个空的IV“0000000000000000”。我在用 Java 解密它时遇到问题。

    String keyHex = "0123456789ABCDEF";
    String ivHex = "0000000000000000";
    String inputHex = "ED488015821C37D59CBA611B19A8EAF3";

    // Hex to byte arrays
    var keyBytes = hexToByte(keyHex);
    var inputBytes = hexToByte(inputHex);
    var ivBytes = hexToByte(ivHex);

    // Add padding to key
    var paddingKey = new byte[16];
    System.arraycopy(keyBytes, 0, paddingKey,0, keyBytes.length);

    // Add padding to iv
    var paddingIV = new byte[16];
    System.arraycopy(ivBytes, 0, paddingIV,0, ivBytes.length);

    IvParameterSpec ivSpec = new IvParameterSpec(paddingIV);
    SecretKeySpec keySpec = new SecretKeySpec(paddingKey, "AES");

    String alg = "AES/CBC/NoPadding";
    Cipher cipher = Cipher.getInstance(alg);
    cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);

    byte[] original = cipher.doFinal(inputBytes);
    System.out.println(Arrays.toString(original));
    String s = new String(original);
    System.out.println("Decrypted: " + s);

它给出了错误的输出: 输出

我的一个猜测是我对键/IV 使用了错误的填充,但是如果我没有添加填充,它会抱怨键的长度不正确。

谁能发现我的错误?

标签: javaaes

解决方案


推荐阅读