如何使用 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==
有人可以帮忙吗?
先致谢
fkey
和 fiv
必须使用 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。
嗨,我是 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==
有人可以帮忙吗?
先致谢
fkey
和 fiv
必须使用 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。