AES encryption using Java and decryption using Javascript

前端 未结 2 1028
眼角桃花
眼角桃花 2021-01-31 00:33

I am making an application which needs Java based AES Encryption and JavaScript based decryption. I am using the following code for encryption as a basic form.

p         


        
2条回答
  •  遇见更好的自我
    2021-01-31 01:21

    1. Your Java code uses the 128-bit AES key while your JavaScript code uses the 256-bit AES key.

    2. Your Java code uses the "Abcdefghijklmnop".getBytes() as the actual key value, while your JavaScript code uses the "Abcdefghijklmnop" as the passphrase from which the actual key is derived.

    3. The default transformation for Java AES is AES/ECB/PKCS5Padding, while default transformation for CryptoJS is AES/CBC/PKCS7Padding.

    One way to fix your example is to fix the JavaScript side:

    // this is Base64 representation of the Java counterpart
    // byte[] keyValue = new byte[] { 'A', 'b', 'c', 'd', 'e', 'f', 'g',
    //                'h', 'i', 'j', 'k','l', 'm', 'n', 'o', 'p'};
    // String keyForJS = new BASE64Encoder().encode(keyValue);
    var base64Key = "QWJjZGVmZ2hpamtsbW5vcA==";
    console.log( "base64Key = " + base64Key );
    
    // this is the actual key as a sequence of bytes
    var key = CryptoJS.enc.Base64.parse(base64Key);
    console.log( "key = " + key );
    
    // this is the plain text
    var plaintText = "Hello, World!";
    console.log( "plaintText = " + plaintText );
    
    // this is Base64-encoded encrypted data
    var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    console.log( "encryptedData = " + encryptedData );
    
    // this is the decrypted data as a sequence of bytes
    var decryptedData = CryptoJS.AES.decrypt( encryptedData, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    } );
    console.log( "decryptedData = " + decryptedData );
    
    // this is the decrypted data as a string
    var decryptedText = decryptedData.toString( CryptoJS.enc.Utf8 );
    console.log( "decryptedText = " + decryptedText );
    

提交回复
热议问题