我目前在解密数据时遇到问题。编码字符串的base64被存储在数据库中。因此,我要打印出编码后的字符串,然后尝试使用“ DECRYPT”而不是“ ENCRYPT”将其重新运行。但是,我从来没有得到Decrypter方法喜欢的值,它总是给我关于参数的错误或该值不是16字节。

public class crypto {
    public static void main(String [] args) {
        String s = args[0];
        String s1 = args[1];
        String ivkey = "thisisasecretkey";
        byte[] ivraw = ivkey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(ivraw, "AES");

        if (s.equalsIgnoreCase("ENCRYPT")) {
            try {
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
                byte[] encrypted = cipher.doFinal(s1.getBytes());
                System.out.println(new String(Base64.encodeBase64(encrypted)));

            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        } else {
            try {
                Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
                cipher.init(Cipher.DECRYPT_MODE, skeySpec);
                byte[] encrypted = cipher.doFinal(s1.getBytes());
                System.out.println(new String(Base64.decodeBase64(encrypted)));

            } catch (Exception e) {
                e.printStackTrace();
            }

        }
        return;
    };
}


命令:crypto "ENCRYPT" "password"
输出:5eQvSzPG1TE2AybgCmeV6A==

命令:crytpo "DECRYPT" "5eQvSzPG1TE2AybgCmeV6A=="
输出:java.security.InvalidKeyException: Parameters missing

我知道安全漏洞,这不是我要问的问题,我希望答案/评论不要被最佳实践所困扰。

最佳答案

您应该进行base 64解码,并且应该在解密之前进行。

08-06 05:46