繁体   English   中英

CryptoJS:将加密结果转换为十六进制,然后再返回,则无法再解密数据

[英]CryptoJS: Converting encryption result to hex, then back, then can no longer decrypt the data

我正在使用 CryptoES(与 CryptoJS 相同的 API/功能)对一些文本进行编码,然后将其解码为我 go 的检查/测试。 以下代码成功编码然后解码一些输入:

const dataToEncrypt = "something";    
const encryptionKeyAsHexString = "2EE1F10212ADD4BEB0E9FED2FEA24733";
const ivAsHexString = "B8C67C19F6E3AE23D4E11E5B376FA891"; 
  
const encryptedData = CryptoES.AES.encrypt(dataToEncrypt, CryptoES.enc.Hex.parse(encryptionKeyAsHexString), { 
      mode: CryptoES.mode.CBC,
      padding: CryptoES.pad.Pkcs7, 
      iv: CryptoES.enc.Hex.parse(ivAsHexString)
  }
);

const decryptedCheck1 = CryptoES.AES.decrypt( encryptedData,   CryptoES.enc.Hex.parse(encryptionKeyAsHexString), {
  mode: CryptoES.mode.CBC, 
  padding: CryptoES.pad.Pkcs7,
  iv: CryptoES.enc.Hex.parse(ivAsHexString) 
} );
const decryptedCheck1Text = decryptedCheck1.toString( CryptoES.enc.Utf8 );
console.log("decryptedCheck1Text:  ", decryptedCheck1Text);

但是,如果我在上面的代码中添加一个额外的步骤来对加密数据进行十六进制编码,那么我将无法再使用以下代码对其进行解密:

const encryptedData = CryptoES.AES.encrypt(dataToEncrypt, CryptoES.enc.Hex.parse(encryptionKeyAsHexString), { 
          mode: CryptoES.mode.CBC,
          padding: CryptoES.pad.Pkcs7, 
          iv: CryptoES.enc.Hex.parse(ivAsHexString)
      }
    );
    
// Convert the encrypted data to hex
const encryptedDataAsHexString =  CryptoES.enc.Hex.stringify(encryptedData.ciphertext);
    
const decryptedCheck2 = CryptoES.AES.decrypt( CryptoES.enc.Hex.parse(encryptedDataAsHexString), CryptoES.enc.Hex.parse(encryptionKeyAsHexString), {
      mode: CryptoES.mode.CBC, 
      padding: CryptoES.pad.Pkcs7,
          iv: CryptoES.enc.Hex.parse(ivAsHexString) 
      } 
);
        
const decryptedCheck2Text = decryptedCheck2.toString( CryptoES.enc.Utf8 );
console.log("decryptedCheck2Text: ", decryptedCheck2Text);

在第二个代码块中, encryptedData.ciphertext被转换为十六进制,其结果作为CryptoES.enc.Hex.parse(encryptedDataAsHexString)传递给decrypt() function 应该反转十六进制?

但是有些事情是不正确的,并且decryptedCheck2Text中没有任何内容。 为什么第二段代码不再用于解密数据?

我已经尝试了几种变体(例如使用 CryptoES.enc.Hex.stringify(encryptedData) 而不仅仅是 .cipherText 部分),但我无法得到任何工作。

我发现在将其作为参数传递之前,有必要对 base64 进行编码,如下所示:

const tempWordArray = CryptoES.enc.Hex.parse(encryptedDataAsHexString);
const tempBase64 = CryptoES.enc.Base64.stringify(tempWordArray)
  const decryptedCheck2 = CryptoES.AES.decrypt( tempBase64, CryptoES.enc.Hex.parse(encryptionKeyAsHexString)
  ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM