vue使用cryptojs加密 lumen使用aes解密,但失败了,有代码,如何解决?

    function decrypt($encryptedData, $key,$iv) {
        $decryptedData = openssl_decrypt(
            base64_decode($encryptedData),
            'AES-128-CBC',
            $key,
            OPENSSL_RAW_DATA,
            $iv
        );
        if ($decryptedData === false) {
            echo 'failed';
        }
        return $decryptedData;
    }

vuejs方法

export function encryptionValue(value, key = 'E7D9B13077291073041EE0AD54EAD975', iv = '0000000000000000') {
    value = value.toString()
    key = CryptoJS.enc.Utf8.parse(key)
    iv = CryptoJS.enc.Utf8.parse(iv)
    const encrypted = CryptoJS.AES.encrypt(value, key, { iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    return encrypted.toString()
}
阅读 1.5k
avatarAI BotBETA

根据提供的代码,问题可能出现在以下几个方面:

  1. 字符编码问题:在VueJS方法中,value 被转换为字符串,但在Lumen方法中,没有显式地进行这个操作。请确保在两个地方都使用了相同的字符编码。
  2. 加密算法和模式问题:VueJS使用的是AES,而Lumen使用的是'AES-128-CBC'。虽然两者都使用了AES,但是具体的模式可能会有一些差别。请确保在VueJS中也使用'AES-128-CBC'作为模式。
  3. 初始化向量(IV)的问题:请确保VueJS和Lumen都使用相同的初始化向量(IV)。在提供的代码中,VueJS和Lumen都使用了相同的IV('0000000000000000'),这是正确的。
  4. 密钥长度问题:请确保VueJS和Lumen都使用相同长度的密钥。在提供的代码中,密钥长度为256位,这是正确的。
  5. 错误处理:在Lumen的decrypt方法中,如果解密失败,会输出'failed'。请确保在调用这个方法时正确处理了错误。

综上所述,以下是VueJS和Lumen的修正代码:

VueJS方法:

export function encryptionValue(value, key = 'E7D9B13077291073041EE0AD54EAD975', iv = '0000000000000000') {
    const keyHex = CryptoJS.enc.Utf8.parse(key);
    const ivHex = CryptoJS.enc.Utf8.parse(iv);
    const encrypted = CryptoJS.AES.encrypt(value, keyHex, { 
        iv: ivHex, 
        mode: CryptoJS.mode.CBC, 
        padding: CryptoJS.pad.Pkcs7 
    });
    return encrypted.toString();
}

Lumen方法:

function decrypt($encryptedData, $key, $iv) {
    $decryptedData = openssl_decrypt(
        base64_decode($encryptedData),
        'aes-128-cbc', // 注意这里使用的是 'aes-128-cbc' 而不是 'AES-128-CBC'
        $key,
        OPENSSL_RAW_DATA,
        $iv
    );
    if ($decryptedData === false) {
        // 这里可以进一步处理错误,例如输出错误信息或者抛出异常等。
        echo 'failed';
    } else {
        return $decryptedData;
    }
}

请注意,这些修改只是基于提供的代码进行的推测。如果仍然存在问题,可能需要进一步检查代码的其他部分,或者考虑使用专门的工具或库来进行加密和解密操作,以确保兼容性和安全性。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏