Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用CryptoJS解密AES密码文本_Javascript_Encryption_Cryptography_Aes_Cryptojs - Fatal编程技术网

Javascript 使用CryptoJS解密AES密码文本

Javascript 使用CryptoJS解密AES密码文本,javascript,encryption,cryptography,aes,cryptojs,Javascript,Encryption,Cryptography,Aes,Cryptojs,我正在尝试按照图中的说明完成蓝牙智能卡读卡器和移动应用程序之间的相互身份验证 根据我对说明的解释,以下是我的尝试: const randomNumbers = 'd3be845b701b37eff9f24ea6108c0f99'; const masterKey = '41435231323535552d4a312041757468'; const d1 = CryptoJS.AES.decrypt( { ciphertext: CryptoJS.enc.Hex.parse(ran

我正在尝试按照图中的说明完成蓝牙智能卡读卡器和移动应用程序之间的相互身份验证

根据我对说明的解释,以下是我的尝试:

const randomNumbers = 'd3be845b701b37eff9f24ea6108c0f99';
const masterKey = '41435231323535552d4a312041757468';

const d1 = CryptoJS.AES.decrypt(
  {
    ciphertext: CryptoJS.enc.Hex.parse(randomNumbers),
  },
  CryptoJS.enc.Hex.parse(masterKey),
  {
    iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.NoPadding,
  },
),

const combined = randomNumbers.concat(d1.toString());

const d2 = CryptoJS.AES.decrypt(
  {
    ciphertext: CryptoJS.enc.Hex.parse(combined),
  },
  CryptoJS.enc.Hex.parse(masterKey),
  {
    iv: CryptoJS.enc.Hex.parse('00000000000000000000000000000000'),
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.NoPadding,
  },
);
当我把它放在一个完整的转义命令中并发送给读者时,我确实得到了一个确认格式有效的响应。问题是响应不包含会话密钥,这意味着我的加密不起作用,无法解锁全部读卡器功能

根据下面的解密说明,我是否可能误解了这个过程


我在代码中找不到bug。也可以方便地进行检查,例如使用。令人恼火的是,指定了CBC模式,但没有说明IV。错误的IV可能是问题的原因。此外,所描述的过程有点奇怪:解密、串联,然后再次解密。在最后一步中,我更希望使用加密(但是,这被描述了两次,因此它可能是正确的)。但这些都只是猜测。在我看来,问题主要是规格不好。可能会很有趣。虽然它不能解决问题,但它显示了其他人如何解释描述以及他们做了什么。联系技术支持人员或许有意义。@Topaco再次感谢您的详细回复。你链接的论坛帖子我已经看了3-4个小时了!决议似乎提到他们使用欧洲央行而不是CBC?我尝试过删除IV并使用ECB,但得到的解密字符串完全相同,因此假设这是一个骗局。我认为你是对的,这个过程很奇怪,在最后一步需要加密,这似乎是合乎逻辑的。不幸的是,制造业总部设在香港,但由于动荡而没有回应。@ Topaco,我认为答案在于忽略一些文件并做出一些假设。我对enc/解密过程知之甚少,但我确实认为将加密字符串发送回读卡器进行自身解密更有意义。你认为值得尝试吗?CBC和ECB提供了不同的结果。在您的情况下,结果仅在第二个块(1块=16字节)中不同,因为使用了0-IV(如果使用了任意IV,结果在第一个块中也会不同)。因此,测试欧洲央行模式当然是有意义的。也许在最后一步尝试加密而不是解密也是值得的(在论坛中,这可能是这样做的:……然后我必须发送一个加密版本的[那些随机数+新的主密钥]……问题(根据论坛)可能是必须先重置单元。