如何使用 CryptoJs 以正确的方式加密到 AES256

How to do the correct way to encrypt to AES256 using CryptoJs

嗨,我是 React Native 的新手, 我可以加密 PHP 中的数据,但不能使用 Crypto JS 对 React Native 进行加密。 (结果在JS里总是不一样,正确的是来自PHP)

这是PHP中的例子:

<?php

$data = 'my1234567';
$iv = 'yourivare1234567';
$key = '356d9abc7532ceb0945b615a622c3370';

$abc = openssl_encrypt($data, 'aes-256-cbc', $key, 0,  $iv);
var_dump($abc);
// result is : string(24) "9EF/QLpR+o/KrVueiI4L0g=="

现在我尝试使用 Crypto JS 在我的 React Native 应用程序中复制它。 但是结果总是不同的,我期望使用硬编码数据的结果和上面的 iv 是:“9EF/QLpR+o/KrVueiI4L0g==”

以下是JS中的源代码:

const data = 'my1234567';
const iv = 'yourivare1234567';
const key = '356d9abc7532ceb0945b615a622c3370';

const fkey = CryptoJS.enc.Hex.parse(key);
const fiv = CryptoJS.enc.Hex.parse(iv);

const enc = CryptoJS.AES.encrypt(data, md5key, {
        iv: fiv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7,
});

const final = enc.ciphertext.toString(CryptoJS.enc.Base64);
console.log('encrypted password: ' , final) // result is kYLFiwI1IDZcFfsKsbrbzg==

有人可以帮忙吗?

先致谢

fkeyfiv 必须使用 UTF8 编码器进行解析。 md5key 未定义,必须替换为 fkey:

const data = 'my1234567';
const iv = 'yourivare1234567';
const key = '356d9abc7532ceb0945b615a622c3370';

const fkey = CryptoJS.enc.Utf8.parse(key);
const fiv = CryptoJS.enc.Utf8.parse(iv);

const enc = CryptoJS.AES.encrypt(data, fkey, {
        iv: fiv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7,
});

const final = enc.ciphertext.toString(CryptoJS.enc.Base64);
console.log('encrypted password: ' , final) // result is 9EF/QLpR+o/KrVueiI4L0g==
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>

请注意(测试目的除外)出于安全原因,不得使用静态 IV。