[英]I encrypted the data in java using AES and trying the same to decrypt form javascript, but i am getting empty string as output in . Any suggestions
下面的代码在java端加密,加密后的数据共享给ui,我们需要解密。 前端和后端使用相同的密钥和 iv。
public static Optional<String> encrypt(String strToEncrypt) {
try {
Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, false);
byte[] keyHex = Hex.decodeHex(secretKey.toCharArray());
byte[] decodeHex = Hex.decodeHex(ivKey.toCharArray());
IvParameterSpec ivspec = new IvParameterSpec(decodeHex);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyHex, AES_ENC);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivspec);
String encodedToString = Base64.getEncoder()
.encodeToString(cipher.doFinal(strToEncrypt.getBytes(StandardCharsets.UTF_8)));
System.out.println("ENC:>"+Base64.getDecoder().decode(encodedToString));
return Optional.ofNullable(encodedToString);
} catch (Exception e) {
//log.error("AesUtil : Error occurred while encrypting the data : " + e);
}
return Optional.empty();
}
public static Optional<String> decrypt(String strToDecrypt) {
try {
Field field = Class.forName("javax.crypto.JceSecurity").getDeclaredField("isRestricted");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, false);
byte[] keyHex = Hex.decodeHex(secretKey.toCharArray());
byte[] decodeHex = Hex.decodeHex(ivKey.toCharArray());
IvParameterSpec ivspec = new IvParameterSpec(decodeHex);
SecretKeySpec secretKeySpec = new SecretKeySpec(keyHex, AES_ENC);
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivspec);
byte[] decode = Base64.getDecoder().decode(strToDecrypt);
String finalRes = new String(cipher.doFinal(decode));
System.out.println(finalRes);
return Optional.ofNullable(finalRes);
} catch (Exception e) {
//log.error("AesUtil : Error occurred while decrypting the data : " + e);
}
return Optional.empty();
}
`下面的代码我尝试解密但它在控制台日志中打印为空也尝试解码 js 中的数据并尝试解密,但仍然得到相同的空 output。
const decrypt = ()=>{
var decode = atob(encrypted);
var decrypted = CryptoJS.AES.decrypt({
ciphertext: encrypted //decode
},key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(decrypted.toString());
console.log(decrypted.toString(CryptoJS.enc.Utf8));
}
var decrypted = CryptoJS.AES.decrypt({
ciphertext: CryptoJS.enc.Base64.parse(encrypted) //decode
},CryptoJS.enc.Hex.parse(key), {
iv: CryptoJS.enc.Hex.parse(iv),
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.