Node crypto - определить длину выходного шифра - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно иметь ограничение на длину вывода моего шифра.Я знаю, это зависит от того, какой алгоритм вы используете, но я не нашел, как это сделать.

const crypto = require('crypto');
const options = {secret : 'SECRET', algorithm : 'CAST-cbc'};

exports.encrypt = (url) => {
  const encrypt = crypto.createCipher(options.algorithm, options.secret);
  let cipher = encrypt.update(url, 'utf8', 'hex');
  cipher += encrypt.final('hex');
  return cipher;
};

Вот как я генерирую шифр.Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

ограничение длины вывода моего шифра...я пытаюсь создать URL сокращатель без необходимости иметь базу данных за ним

Шифрование всегда будет длиннее, чем исходный текст .Вам нужно будет иметь некоторый IV (вектор инициализации), зашифрованную информацию, опционально код аутентификации, а затем все закодированные в безопасном формате URL.

Теоретически вы можете пожертвовать некоторым уровнем безопасности и иметь какое-то сохраняющее формат шифрование , но оно будет по крайней мере таким же, как и у исходного источника.

пример окончательного хэша: 1d6ca5252ff0e6fe1fa8477f6e8359b4

Вы не сможете восстановить исходное значение из хэша.Вот почему для серьезного сокращения URL вам понадобится база данных с парой ключ-значение, где ключом может быть id или хеш

Вы все равно можете правильно шифровать и кодировать исходные данные, только вывод не будеткороче.

0 голосов
/ 14 февраля 2019

Учитывая обновления, в которых вам нужен хеш, а не шифрование, вот как это работает.

Вы хешируете исходный URL и сохраняете файл на диск (или где-нибудь, S3).Этот файл имеет имя, соответствующее хешу.Таким образом, если URL-адрес 'http://google.com', хеш может быть' C7B920F57E553DF2BB68272F61570210 '(хэш MD5), поэтому вы должны сохранить' C7B920F57E553DF2BB68272F61570210'.txt или что-то на сервере с содержимым * 100 на сервере с *1005**.

Теперь, когда кто-то заходит на http://yourURLShortnener.com/C7B920F57E553DF2BB68272F61570210, вы просто просматриваете этот файл на диске и загружаете его содержимое, а затем выполняете перенаправление для этого URL.

Очевидно, вы бы предпочлиболее короткий хеш, но вы можете просто взять 10-значную подстроку из исходного хеша.Это увеличивает вероятность хеш-коллизий, но это только риск, который вы принимаете.

0 голосов
/ 12 февраля 2019

Выход зависит от входа, всегда.Что вы можете сделать, так это дополнить ввод или вывод до желаемой длины, чтобы создать согласованный окончательный хеш.Однако для этого требуется, чтобы максимальная длина входных данных была максимальной.

Кроме этого, нет способа принудительно задать длину и все еще иметь что-то дешифруемое.Если вам просто нужен хеш для проверки, это немного по-другому.Если вы уточнить цель, мы можем помочь больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...