Context, мы переписываем нашу серверную кодовую базу в NodeJS.
У нас есть код в PHP, который работал для создания строк аутентификации, который я не могу скопировать в NodeJS.
PHP Код
<?php
namespace App\Medi;
class MCrypt {
private $iv = '0000000000000000'; #Same as in JAVA
private $key = 'oshi12wq!@WQ'; #Same as in JAVA
function __construct() {
$this->key = hash('sha256', $this->key, true);
}
function encrypt($str) {
$iv = $this->iv;
$td = @mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
@mcrypt_generic_init($td, substr($this->key, 0, 32), $iv);
$block = @mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($str) % $block);
$str .= str_repeat(chr($pad), $pad);
$encrypted = @mcrypt_generic($td, $str);
@mcrypt_generic_deinit($td);
@mcrypt_module_close($td);
return base64_encode($encrypted);
}
}
и, наконец, что я делаю в NodeJS
const shajs = require('sha.js');
const mcrypt = require('mcrypt');
class MCrypt {
static get key() {
//noinspection JSUnresolvedFunction
return shajs('sha256')
.update('oshi12wq!@WQ')
.digest('base64')
.substr(0, 32);
}
static encrypt(text) {
var key = Buffer.from(MCrypt.key, 'base64');
console.log("key: ", MCrypt.key);
var iv = String.fromCharCode(48).repeat(16);
var blockSize = 16;
var pad = blockSize - (text.length % blockSize);
text = text + String.fromCharCode(pad).repeat(pad);
let bfEcb = new mcrypt.MCrypt('rijndael-128', 'cbc');
bfEcb.open(key, iv);
return bfEcb.encrypt(text).toString('base64');
}
}
module.exports = MCrypt;