2017-02-10 63 views
-1

我无法使用crypto-js解密此密码。无法解密来自php加密的密文

明文密钥: 'abcdabcdabcdabcd'

四:'0000000000000000'

秘密消息:'5555555555555555'

密文:'jIwKE2X1N/1aiZfWoaY+USXRnslF1tsXKVtUON8ucn0='

我加密的js代码如下所示:

var iv = '0000000000000000'; 
var aesKey = 'abcdabcdabcdabcd'; 
var ciphertext = 'jIwKE2X1N/1aiZfWoaY+USXRnslF1tsXKVtUON8ucn0='; 
var decryption = CryptoJS.AES.decrypt(ciphertext, aesKey, {iv: iv}); 
console.log(decryption.toString(CryptoJS.enc.Utf8)); 

运行此代码后,console.log为空,我做错了什么?

+0

我',m不知道,但它看起来像这样 $ iv = str_repeat(“\ 0”,openssl_cipher_iv_length('AES-128-CBC')); 所以我认为它是propably'0000000000000000' – Agr

+0

完成,我还附加了解密对象的链接 https://ibb.co/cg8c8v – Agr

+0

您很可能需要将'CryptoJS.enc.Hex.parse'应用到您的'iv在JavaScript中(也可能是你的密钥?)你的IV在PHP中是一系列空字节,但在JS中它是一系列'48'值字节(字符'0'的ASCII值)。 'Hex.parse'将读取输入为一系列2字节的字节。或者,使用实际的空字节而不是一系列的零,''\ 0 \ 0 \ 0 \ 0 ...'' – apsillers

回答

1

不是一个答案,需要格式化

考虑:

keyString:   "abcdabcdabcdabcd" 
ivString:   "0000000000000000" 
secretMessageString: "5555555555555555" 
ciphertextBase64: "jIwKE2X1N/1aiZfWoaY+USXRnslF1tsXKVtUON8ucn0=" 

显示为十六进制:

keyHex:     61626364616263646162636461626364 
ivHex:     30303030303030303030303030303030 
secretMessageHex:  35353535353535353535353535353535 
secretMessageHexPadded: 3535353535353535353535353535353510101010101010101010101010101010 
ciphertextHex:   8c8c0a1365f537fd5a8997d6a1a63e5125d19ec945d6db17295b5438df2e727d 

把这些值转换成一个在线AES Calculator Encrypt

ciphertextHexCalculated: 319C920C815076E0DD863FCB5AE8DDBD6D8065E9B4D285E06B0F58DD1F0EA3B7 

请注意,这与提供密文的问题不同。

有些东西与参数,选项或数据不正确。

然而解密确实与为0x00字节的IV工作:

keyString:   "abcdabcdabcdabcd" 
ivHex: 00000000000000000000000000000000 
secretMessageString: "5555555555555555" 

Online AES Calculator Decrypt

因为明文被用作加密文本这是不正确。

+0

感谢您的回答,这是否表示我粘贴错误的数据? 对不起我的愚蠢问题,这是我第一次处理密码学。 – Agr