Сегодня я покажу вам то, что никто не говорит вам при шифровании и расшифровке.
Давайте начнем с импорта криптографии, так как это то, что нам нужно xDD.
const crypto = require("crypto");
Что-то очень важное, о чем почти все не говорят вам в своих учебниках и прочем, это тот факт, что для расшифровки вам нужны те же ключи и прочее, что вы использовали для шифрования данных.
поэтому, если вы видите что-то вроде этого:
const someVarName = crypto.randomBytes(16);
вы можете зашифровать свои данные, но не сможете расшифровать их обратно, причина заключается в имени «randomBytes». что вещи возвращают случайные байты.
и в конечном итоге вы окажетесь в stackoverflow. пытаясь исправить тогда конфигурации SSL.
поэтому в наш файл давайте добавим наши секретные ключи и прочее.
const crypto = require("crypto"); const iv = process.env.PROD_IV || "not-prod"; const iv = process.env.PROD_KEY || "not-prod-ass-well";
давайте также добавим алгоритм, который мы собираемся использовать
.... const algorithm = "aes-256-cbc";
затем поставьте хэшер xDD, этот метод будет хэшировать ваши секреты.
function scrypt (num, secret) { return new Promise((res, rec) => { return crypto.scrypt(secret, "salt", num, (err, key) => { if (err) return rec(err); return res(key); }); }); } // https://nodejs.org/api/crypto.html#crypto_crypto_scrypt_password_salt_keylen_options_callback
Пока мы передаем одни и те же параметры в эту функцию, мы будем получать одни и те же данные.
для IV и ключ, который мы делаем.
... function getIv () { return scrypt(8, iv).then((response) => response.toString("hex")); } function getKey () { return scrypt(32, key).then((response) => response); }
Теперь давайте создадим шифровальщик
Давайте также сделаем расшифровщик… давайте соберем все воедино
Помните!!
Если вы не хотите в конечном итоге выяснять, почему F* SSL не работает
Не забудьте использовать один и тот же iv и ключ для обоих методов.