简体   繁体   English

从 angular 8 加密时解密文本开头的垃圾值(AES 128 位)

[英]Garbage value at the beginning of decrypted text (AES 128 bit) when encrypting from angular 8

My backend AES-128 decryption logic is correct as when i do AES-128 encryption in java then it decrypts it properly.我的后端 AES-128 解密逻辑是正确的,因为当我在 Java 中进行 AES-128 加密时,它会正确解密。 Now i tried to replicate the encryption logic in Angular 8, and then the decrypted text now contains garbage value at the initial bytes and remaing half string is correct (something like this da%: mL ͔1","add":"uk","com":"wow"}).现在我尝试在 Angular 8 中复制加密逻辑,然后解密的文本现在在初始字节处包含垃圾值,并且剩余的半串是正确的(类似这样 da%: mL ͔1", "add":"uk","com":"wow"})。

Below is my angular code for encryption下面是我用于加密的角度代码

encryptData(value: any) {
    var iv = CryptoJS.enc.Base64.parse(this.generateIV());
    var key = CryptoJS.enc.Hex.parse('0123456789abcdef0123456789abcdef');
    var aesEncrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(value.toString()), key,{
        keySize: 128 / 8,
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      });

    console.log(JSON.stringify({
                        payloadToken: this.getRSAEncryption("0123456789abcdef0123456789abcdef"), 
                        payloadVariable: aesEncrypted.iv.toString() , 
                        payloadText: aesEncrypted.toString()}
                ));
    return aesEncrypted.toString();

  }

generateIV() {
    var key = "";
    var hex = "0123456789abcdef";

    for (var i = 0; i < 15; i++) {
      key += hex.charAt(Math.floor(Math.random() * 15));
    }
    return key;
  }

and below is my decryption logic in java下面是我在java中的解密逻辑

public static String packetDecryption(String requestPacket){
      DecryptedTokenPacket decryptedTokenPacket = GSON.fromJson(requestPacket, 
      DecryptedTokenPacket.class);
      SecretKey key2 = new SecretKeySpec(decryptedTokenPacket.getDecData(), 0, 
      decryptedTokenPacket.getDecData().length, EncConstants.ENC_ALGO);
      // Instantiate the cipher
     Cipher cipher = Cipher.getInstance(EncConstants.CBC_ALGO);
     byte[] ivBytes = new Base64().decode(decryptedTokenPacket.getPayloadVariable());
     cipher.init(Cipher.DECRYPT_MODE, key2, new IvParameterSpec(ivBytes));
     byte[] encryptedTextBytes = new Base64().decode(decryptedTokenPacket.getPayloadText());
     byte[] decryptedTextBytes;
     decryptedTextBytes = cipher.doFinal(encryptedTextBytes);
     return new String(decryptedTextBytes);
}

//this function is used in the gateway for decrypting the secret key and then pass through
public DecryptedTokenPacket decryptKeyUsingRSA(EncryptedPacket encryptedPacket){
                Cipher cipher = Cipher.getInstance(RSA_ALGO);
                cipher.init(Cipher.DECRYPT_MODE, privateKey);
                byte[] decData = cipher.doFinal(new Base64().decode(encryptedPacket.getPayloadToken()));
                decryptedTokenPacket.setPayloadText(encryptedPacket.getPayloadText());
                decryptedTokenPacket.setPayloadVariable(encryptedPacket.getPayloadVariable());
                decryptedTokenPacket.setDecData(decData);
return decryptedTokenPacket;
}

Beans豆子

public class DecryptedTokenPacket {
    private String payloadVariable;
    private String payloadText;
    private byte[] decData;
}

public class EncryptedPacket {
    private String payloadVariable;
    private String payloadText;
    private String payloadToken;
}

Not sure what is causing this garbage value at the beginning.不确定一开始是什么导致了这个垃圾值。 Can someone help me with this issue?有人可以帮我解决这个问题吗?

const iv = CryptoJS.lib.WordArray.random(128/8);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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