我一直在尝试使用Cipher类加密一段时间,但我仍然遇到问题。我遇到填充和字节数组大小的问题。我收到这个例外 “使用填充密码解密时,输入长度必须是8的倍数” 这是我写的代码:
public CipherClass() {
try {
cipher = Cipher.getInstance(CIPHER_ALGO);
secKey = SecretKeyFactory.getInstance(CIPHER_ALGO).generateSecret(new DESedeKeySpec(new BigInteger(KEY, 16).toByteArray()));
}
catch(GeneralSecurityException e){
e.printStackTrace();
}
}
private String encrypt(String text){
try {
cipher.init(Cipher.ENCRYPT_MODE, secKey);
Base64 encoder = new Base64();
return new String(encoder.encode(cipher.doFinal(text.getBytes())));
}
catch(GeneralSecurityException e) {
e.printStackTrace();
}
return "";
}
private String decrypt(String text) {
try {
cipher.init(Cipher.DECRYPT_MODE, secKey);
Base64 decoder = new Base64();
return new String(decoder.decode(cipher.doFinal(text.getBytes())));
}
catch (Exception e) {
e.printStackTrace();
}
return "";
}
我也尝试使用Hex而不是Base64,我收到了这个异常: “鉴于最后一块没有正确填充”
请帮我解决,找错误。 提前致谢。答案 0 :(得分:0)
您需要在解密之前运行base64解码器。这些操作需要相互映射:encrypted = encrypt(plaintext)
,encoded = encode(encrypted)
; encrypted = decode(encoded)
,plaintext = decrypt(encrypted)