【发布时间】:2019-04-11 10:18:08
【问题描述】:
我有一个 API 可以调用,我必须使用 RSA/ECB/PKCS1 填充和 AES/CBC/PKCS5PADDING 加密我的数据。
Sample Data: {"KEY":"VALUE"}
第一步:
I have to generate a random number of 16 digit. eg: '1234567890123456'
第二步:
Do RSA/ECB/PKCS1Padding to random number and base64Encode the result. we get "encrypted_key"
第三步:
Concatenate random number & data:
DATA = 1234567890123456{"KEY":"VALUE"}
第四步:
Do AES/CBC/PKCS5Padding on DATA (from Step 3) using random number(1234567890123456) as KEY & Base64Encoded random number as IV. we get "ENCRYPTED_DATA"
所以,对于 第 1 步,我使用的是 JSEncrypt javascript 库。
对于 第 4 步,我正在使用 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 加密(第 4 步)中使用 PKCS5Padding,但似乎 AES 不支持 PKCS5Padding 但 PKCS7Padding。
我认为我将 KEY 和 IV 传递给 CryptoJS 的方式有误。
任何帮助将不胜感激。
【问题讨论】:
标签: encryption cryptography cryptojs jsencrypt