繁体   English   中英

我使用 AES 加密了 java 中的数据,并尝试以相同的方式解密表单 javascript,但我得到的空字符串为 output。有什么建议

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM