я разрабатывал сервер с Node.js и клиента с каркасом Ионныепочему шифрует результат отличается использованием алгоритма AES же и тот же ключ между CryptoJS и узлом встроенным криптографическим модулем
Я сделал API для запроса авторизации от клиента
когда запрос клиента Логин, посылает зашифрованный идентификатор и пароль строку
и сервер расшифровывать принятый идентификатор и пароль строку и проверить проверки
Я использовал криптографию-JS (https://code.google.com/archive/p/crypto-js/) Lib окон- чательно для шифрования клиента
код шифрования клиента ниже
var secret = 'abcdefghijklmnopqrstuvwxyz123456';
var id = "someId";
var encrypted = CryptoJS.AES.encrypt(id, password);
console.log(encrypted.toString()); // U2FsdGVkX19EfjjBwydSZL509wKl5TEX+4f3vakEejU=
Для серверного дешифрования я использовал узел встроенный криптографической модуль
const crypto = require('crypto');
var method = 'aes256';
var secret = 'abcdefghijklmnopqrstuvwxyz123456';
var id = "U2FsdGVkX19EfjjBwydSZL509wKl5TEX+4f3vakEejU=" // suppose we received with no loss
var decipher = crypto.createDecipher(method, secret);
decipher.update(id,'base64','utf8');
var deciphered = decipher.final('utf8');
console.log(deciphered);
аварии на стороне сервера код расшифровывают с сообщением об ошибке ниже
crypto.js:153
var ret = this._handle.final();
^
Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
at Error (native)
at Decipher.Cipher.final (crypto.js:153:26)
at Object.<anonymous> (...\routes\index.js:33:27)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
at Object.<anonymous> (...\app.js:18:14)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
Поскольку сообщение об ошибке было «плохой дешифровкой», поэтому я попытался зашифровать такие же текст с каждой библиотеки
[крипто-УД]
var secret = 'abcdefghijklmnopqrstuvwxyz123456';
var id = "someId";
var encrypted = CryptoJS.AES.encrypt(id, password);
console.log(encrypted.toString()); // U2FsdGVkX19EfjjBwydSZL509wKl5TEX+4f3vakEejU=
[криптографический модуль]
const crypto = require('crypto');
var method = 'aes256';
var secret = 'abcdefghijklmnopqrstuvwxyz123456';
var id = "someId"
var cipher= crypto.createCipher(method, secret);
cipher.update(id,'base64','utf8');
var ciphered = decipher.final('utf8');
console.log(ciphered.toString()); // WAsd61C2bfG7UbO5STo13A==
Я узнал результат библиотеки отличается
plain text : 'someId'
crpyto-js : 'U2FsdGVkX19EfjjBwydSZL509wKl5TEX+4f3vakEejU='
crpyto module : 'WAsd61C2bfG7UbO5STo13A=='
Я пытался понять, исходный код каждой библиотеки
, но это было слишком усложнять так, я не мог понять,
Я хочу знать, как encrytion работы каждой библиотеки и то, что вызывает другой результат
Эти два ответа моей стороны обрабатывают оба направления: [CryptoJS to node.js] (http://stackoverflow.com/a/28361216/1816580) и [node.js to CryptoJS] (http://stackoverflow.com/a/33942660/1816580) –
вы не используете действительный ключ AES, поэтому обе системы пытаются сделать его правильной длиной, по-видимому, с разными стратегиями. – dandavis
@ dandavis Вот в чем разница. Оба не используют какой-либо ключ, но предполагают, что прошедший «ключ» является паролем, а затем выводит фактический ключ из пароля. Единственное различие заключается в том, что CryptoJS использует случайную соль, а node.js - нет. Вот что говорит мой ответ за моей первой ссылкой. К сожалению, я не могу предложить дубликат. –