gpt4 book ai didi

javascript - 如何将此加密函数从 PHP 转换为 Javascript

转载 作者:行者123 更新时间:2023-11-30 13:58:16 25 4
gpt4 key购买 nike

我正在将一个网络应用程序从 PHP 迁移到基于 JS 的框架。该应用程序使用 mcrypt_encrypt 和 base64 进行加密。我尝试在 Javascript 中使用 mcrypt 模块,但没有得到相同的结果。

原始的 PHP 函数看起来像这样

function safe_b64encode($string) {
$data = base64_encode($string);
$data = str_replace(array('+', '/', '='), array('-', '_', ''), $data);
return $data;
}

function encrypt($value) {
$text = $value;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, ENCRYPTION_KEY, $text, MCRYPT_MODE_ECB, $iv);
return trim(safe_b64encode($crypttext));
}

我的 JS 版本是这样的

const MCrypt = require('mcrypt').MCrypt

const rijndael128Ecb = new MCrypt('rijndael-128', 'ecb')
const iv = rijndael128Ecb.generateIv()

rijndael128Ecb.validateKeySize(false)
rijndael128Ecb.open(ENCRYPTION_KEY, iv)

let cipherText = rijndael128Ecb.encrypt('sometext')
cipherText = Buffer.concat([iv, cipherText]).toString('base64')
cipherText = cipherText.replace('+','-').replace('/','_').replace('=','')

最佳答案

我想你快到了,你只需要使用相同的算法,你使用的是 128 位 Rijndael,我在 Node.js 中切换到 256 位,它现在可以工作了。

// Surely this key is uncrackable...
const ENCRYPTION_KEY = 'abcdefghijklmnop';
const MCrypt = require('mcrypt').MCrypt;

function encryptRijndael256(plainText, encryptionKey) {

const rijndael256Ecb = new MCrypt('rijndael-256', 'ecb');
const iv = rijndael256Ecb.generateIv();

rijndael256Ecb.validateKeySize(false);
rijndael256Ecb.open(encryptionKey, iv);

let cipherText = rijndael256Ecb.encrypt(plainText);
cipherText = cipherText.toString('base64');
cipherText = cipherText.replace('+','-').replace('/','_').replace('=','')

return cipherText;
}

const plainText = 'sometext';
const cipherText = encryptRijndael256(plainText, ENCRYPTION_KEY);
console.log("Cipher text: ", cipherText);

我得到以下密文(带有琐碎且不安全的!)我正在使用的 key :

k3ZQ8AbnxhuO8TW1VciCsNtvSrpbOxlieaWX9qwQcr8

用于 PHP 和 JavaScript 的结果。

关于javascript - 如何将此加密函数从 PHP 转换为 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56805094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com