node.js, как представить шифрование PHP MD5

Я преобразовываю существующий сайт на основе php в приложение node.js, и мне нужно воспроизвести этот метод шифрования из php в js.

private static $_passwordSalt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer';
public static function getCryptedPassword($password = 'password') {
return sha1(md5(self::$_passwordSalt.$password));
}

До сих пор я пробовал это, но он не возвращает те же результаты:

UserSchema.methods.hashPassword = function(password) {
var salt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer'
var md5Hash = md5(password + salt);
var hash = sha1(md5Hash);
return hash;
};

3

Решение

пожалуйста попробуйте это:

    var crypto = require('crypto');
var salt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer'
var password = 'pass';

var hashMd5 = crypto.createHash('md5').update(salt + password).digest("hex");
var hasSha1 = crypto.createHash('sha1').update(hasMd5).digest("hex");
console.log(hashSha1);

как файл: hash.js

И как hash.php этот код:

<?php

$_passwordSalt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer';
$password = 'pass';

//echo md5("phinware");
echo sha1(md5($_passwordSalt.$password));
echo "\n";

И чем выполнить оба файла:

  • > php hash.php
  • > узел hash.js

Мои результаты:

оба: 3cbd1242e8e510a16f39d7e0bfd18a0e03d0de3f

3

Другие решения

PHP:

$a = 'a';
$b = 'b';
echo md5($a.$b);

равно node.js:

var crypto = require('crypto');
var a = 'b', b = 'b';
var md5 = crypto.createHash('md5');
md5.update(xml, 'utf8');
md5.update(config.secret, 'utf8');
console.log(md5.digest('hex'));
1

Попробуйте это с помощью крипто модуля:

var crypto = require('crypto');

UserSchema.methods.hashPassword = function(password) {
var salt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer';
var hashStr = password + salt;
var md5Hash = crypto.createHash('md5').update(hashStr).digest('hex');
var sha1 = crypto.createHash('sha1').update(md5Hash).digest('hex');
console.log(sha1);
return sha1;
};
0

Вы должны учитывать, что алгоритм хеширования работает с байтовыми значениями, и вы используете строковые значения. Это означает, что здесь заиграет кодировка, и, насколько я знаю, PHP по умолчанию использует latin1, а node.js использует utf-8.

crypto.createHash('md5').update(hashStr, 'ascii').digest('hex')

Я не уверен, что ascii обрабатывает только 7-битные ascii или фактические расширенные наборы символов, такие как latin1, но, похоже, он единственный поддерживается напрямую в update() метод. Если вам нужно управлять расширенной кодировкой, вы должны создать буфер из правильной кодировки и использовать его в качестве параметра для update() вместо. Встроенная поддержка в node.js довольно ограничена:

Buffer.isEncoding = function(encoding) {
switch ((encoding + '').toLowerCase()) {
case 'hex':
case 'utf8':
case 'utf-8':
case 'ascii':
case 'binary':
case 'base64':
case 'ucs2':
case 'ucs-2':
case 'utf16le':
case 'utf-16le':
case 'raw':
return true;

default:
return false;
}
};

И вы должны рассмотреть возможность использования какого-либо другого инструмента для его преобразования. Эта тема (Список кодировок, которые поддерживает Node.js) предлагает использовать iconv или iconv-lite.

Конечно, то же самое относится и к SHA1, но, поскольку вы используете SHA1 в шестнадцатеричном представлении MD5, он никогда не выпадет из 7-битного ascii (где latin1 и utf-8 выдают одну и ту же последовательность байтов).

0

вот правильное решение

var md5 = require('MD5'),
sha1 = require('sha1');

var salt = 'd2g6IOP(U(&§)%U§VUIPU(HN%V/§§URerjh0ürfqw4zoöqe54gß0äQ"LOU$3wer';
var hash = sha1(md5(salt+password));
return hash;
0
По вопросам рекламы [email protected]