我目前在解密数据时遇到问题。编码字符串的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解码,并且应该在解密之前进行。