下面的代码用于加密在java端和加密的数据共享给用户界面,我们需要解密。前端和后端使用相同的密钥和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中的数据,并试图解密,但仍然得到相同的空输出。
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));
}
1条答案
按热度按时间x33g5p2x1#