我有一个API需要调用,其中需要使用RSA/ECB/PKCS1填充及AES/CBC/PKCS5PADDING进行数据加密。
Sample Data: {"KEY":"VALUE"}
Step.1:
I have to generate a random number of 16 digit. eg: '1234567890123456'
Step.2:
Do RSA/ECB/PKCS1Padding to random number and base64Encode the result. we get "encrypted_key"
Step.3:
Concatenate random number & data:
DATA = 1234567890123456{"KEY":"VALUE"}
Step.4:
Do AES/CBC/PKCS5Padding on DATA (from Step 3) using random number(1234567890123456) as KEY & Base64Encoded random number as IV. we get "ENCRYPTED_DATA"
因此,在第一步中,我使用了JSEncrypt
JavaScript库。
在第四步中,我使用CrytoJS.AES.encrypt()
函数。我非常确定我的JSEncrypt函数正常工作,因为客户端可以解密它,但是客户端无法解密我的数据。 我觉得在使用CryptoJS
时犯了错误。
有人能够指导我如何正确地使用这个库吗?
我正在做的是:
KEY = '1234567890123456'
IV = MTIzNDU2Nzg5MDEyMzQ1Ng== (result of btoa('1234567890123456') )
DATA = "1234567890123456{"KEY":"VAL"}"
cryptedData = Crypto.AES.encrypt(DATA, KEY, {iv: IV, mode: CryptoJS.mode.CBC,padding:CryptoJS.pad.Pkcs7})
我被告知在AES/CBC加密(第四步)中使用PKCS5Padding
,但似乎AES
不支持PKCS5Padding
,而是支持PKCS7Padding
。
我想我在将KEY和IV传递给CryptoJS
的方式上犯了错误。
非常感谢任何帮助。