当前位置: 首页 > 知识库问答 >
问题:

如何使用aes-128-cbc算法实现CryptoJS解密?

贾飞鸿
2023-03-14

下面是我到现在为止所尝试的

 function decrypt_core_AES_CBC(password, ciphertext) {
   var iv  = CryptoJS.lib.WordArray.random(128/8);
   var message = CryptoJS.AES.decrypt(ciphertext, password, { mode:    CryptoJS.mode.CBC, iv: password });

  console.log("The current iv is: " + iv.toString() );
  return CryptoJS.enc.Utf8.stringify(message);
 }


var data = '6615702f2dd672f643fd57623d6362a510a98faf4b1c068fd468b525a5fa5471809852a0f9cb7936ce3d3892c233b8c48ce2608f16ce6fa66005b2d97689fbb4';
var key = '3426D38AB846B62B9C236D288778D997';
var dec = decrypt_core_AES_CBC(key, data);

console.log(dec);

下面是适用于我的node.js代码。在CryptoJ中,我没有成功地实现类似的功能。根据我的理解,crypto是内置库,其中的节点在其上有自己的包装器。

var crypto = require('crypto');
var defaultAlgorithm= 'aes-128-cbc';
var defaultFormat= 'hex';
var ivLength= 16;
function decode (data, key, algorithm, format) {

    // Make sure the data is a buffer object
    if (data instanceof Buffer) {
        data = data.toString();
    }

    // Get defaults if needed
    algorithm = algorithm || defaultAlgorithm;
    format = format || defaultFormat;

    ivLength = ivLength * 2;

    // Get the initialization vector
    var iv = new Buffer(data.substring(0, ivLength), 'hex');

    // Remove the iv from the data
    data = data.substring(ivLength);
    var decipher = crypto.createDecipheriv(algorithm, new Buffer(key, 'hex'), iv);
    var decrypted = decipher.update(data, format, 'utf8') + decipher.final('utf8');

    return decrypted;
}

var data ='6615702f2dd672f643fd57623d6362a510a98faf4b1c068fd468b525a5fa5471809852a0f9cb7936ce3d3892c233b8c48ce2608f16ce6fa66005b2d97689fbb4';
var key = '3426D38AB846B62B9C236D288778D997';
var dec = decode(data, key, defaultAlgorithm, defaultFormat);

console.log(dec);

共有1个答案

仇和蔼
2023-03-14

您有三个问题:

>

  • CryptoJS支持两种类型的加密/解密:从密码派生的密钥和直接传递的密钥。您希望从密钥执行此操作,因此需要将十六进制编码的密钥字符串解析为CryptoJS的本机格式,然后将其传递给decrypt()函数:

    key = CryptoJS.enc.Hex.parse(key);
    

    另外,不要混淆密钥和密码。

    var iv = CryptoJS.enc.Hex.parse(ciphertext.slice(0, 32));
    ciphertext = CryptoJS.enc.Hex.parse(ciphertext.slice(32));
    
    var message = CryptoJS.AES.decrypt({
        ciphertext: ciphertext
    }, key, {
        iv: iv
    });
    

  •  类似资料:
    • 我使用JavaAPI生成128bit密钥。下面是我使用的算法: 我可以通过这些方法轻松地使用secretKey加密和解密消息。由于Java默认使用128bit AES加密,因此它使用SHA1生成原始密钥的哈希,并将哈希的前16字节用作AES中的密钥。然后以十六进制格式转储IV和密文。 但是,它返回一个空字符串。

    • 我用java编写了这段代码,以便解密密文。我有钥匙。对我来说,一切都是正确的,但我有我要解释的问题。 这是我的代码: 我收到以下错误: 出了什么问题?我知道这个问题在某种程度上与衬垫有关,但我不知道确切的解决方案。我只有一个密文IV和密钥。

    • 我有一些问题,解密文本的CryptoJS已经用Java加密。解密应使用AES/CBC/PKCS5Padding完成。加密的字符串是base64编码的,我在尝试解密字符串之前对其进行解码。 这就是Java代码的样子:

    • 我只想用这3种模式测试openSSL中的AES:128192和256密钥长度,但我解密的文本与我的输入不同,我不知道为什么。此外,当我传递一个巨大的输入长度(比如1024字节)时,我的程序显示。。。我的意见总是一样的,但这并不重要,至少现在是这样。代码如下: 编辑: 当我将输出大小更改为而不是时,我得到了结果: 那么,是否有可能存在Outpus大小和IV大小的问题?它们应该有什么尺寸(AES-CB

    • 问题内容: 我在解密以前在PHP应用程序中加密过的pgcrypto中的数据时遇到问题。 我尝试了3种加密类型: 1)mcrypt-RIJNDAEL 128 CBC 2)mcrypt-RIJNDAEL 256 CBC 3)openssl_encrypt-aes-256-cbc 一切都在PHP中很好地解密,但是在pgcrypto中,我只能使用相同的密钥和iv进行解密1)mcrypt-RIJNDAEL

    • 我在pgcrypto中解密以前在PHP应用程序中加密的数据时遇到问题。 我尝试了3种类型的加密: 1)mcrypt-rijndael 128 cbc 2)mcrypt-rijndael 256 cbc 3)openssl_encrypt-aes-256-cbc 在PHP中,所有的东西都可以加密解密,但在pgcrypto中,我可以使用相同的密钥和iv解密,仅1)mcrypt-rijndael 128