Сегодня я покажу вам то, что никто не говорит вам при шифровании и расшифровке.

Давайте начнем с импорта криптографии, так как это то, что нам нужно 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 и ключ для обоих методов.