Здравствуйте, мне нужна помощь для преобразования функции шифрования My PHP в Nodejs с использованием криптомодуля:
Этот код уже работает
// Constructor params
$this->algorithm = "blowfish";
$this->token = "3SzzaErRzj0#RuGr@JTkh[MO0AMIW*d!Sul/CEL!*rPnq$oOEgYaH}fNw{jw1b/DyLUdL])+JOMES@Z7MIRI>(p*nY{yl%h]4ylx";
public function decrypt($string)
{
$key = hash('sha256', $this->token);
list($encrypted_data, $iv) = explode('::', base64_decode($string), 2);
return openssl_decrypt($encrypted_data, $this->algorithm, $key, 0, $iv);
}
public function encrypt($string)
{
$output = false;
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($this->algorithm));
// hash
$key = hash('sha256', $this->token);
$output = openssl_encrypt($string, $this->algorithm, $key, 0, $iv);
return base64_encode($output . '::' . $iv);
}
И код в nodejs , я сделал дешифратор работал правильно, но шифр не работает
const crypto = require('crypto');
const decipher = async (alg, key, value) => {
const hash = crypto.createHash('sha256');
hash.update(key);
let token = hash.digest('hex');
let buff = new Buffer.from(value, 'base64');
let [encrypted, iv] = buff.toString('ascii').split('::', 2);
iv = new Buffer.from(iv);
const decipher = crypto.createDecipheriv(alg, token, iv);
let decrypted = await decipher.update(encrypted, 'base64', 'ascii');
decrypted += decipher.final('ascii');
return decrypted;
}
/* this one is not working */
const cipher = async (alg, key, value) => {
let iv = crypto.randomBytes(8);
var sha256 = crypto.createHash('sha256');
sha256.update(key);
var newkey = sha256.digest('base64');
var encryptor = await crypto.createCipheriv(alg, newkey, iv);
encrypted = encryptor.update(value, 'utf8', 'base64') + encryptor.final('base64');
var final = encrypted + "::" +iv;
let buf = Buffer.from(final);
let encodedData = buf.toString('base64');
return encodedData;
}
любая помощь, чтобы помочь мне сделать свою работу, я ценю