节点加密-定义输出密码长度

时间:2019-02-12 20:12:12

标签: node.js encryption cryptography

我需要对密码的输出长度进行限制。我知道这取决于您使用哪种算法,但是我没有发现如何做到这一点。

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 :(得分:2)

  

密码输出长度的限制
  ...
  正在尝试构建网址缩短程序,而不必在其后面建立数据库

加密将始终比原始明文长。您将需要一些IV(初始化向量),加密信息,可选的身份验证码,然后全部编码为网址安全格式。

从理论上讲,您可能会牺牲某种程度的安全性,并进行某种保留格式的加密,但是它的长度至少与原始来源一样长。

  

最终哈希示例:1d6ca5252ff0e6fe1fa8477f6e8359b4

您将无法从哈希值重建原始值。这就是为什么要使用严肃的网址缩短服务时,您将需要一个具有键值对的数据库,其中键可以是id或hash

您仍然可以正确加密和编码原始数据,只是输出不会缩短。

答案 1 :(得分:1)

输出始终取决于输入。您可以做的就是将输入或输出填充到所需的长度,以生成一致的最终哈希。但是,这要求输入的最大长度。

除此之外,没有办法强制长度,但仍然可以解密。如果您只需要哈希来进行验证,那就有些不同了。如果您明确目的,我们可以提供更多帮助。

答案 2 :(得分:0)

给出需要散列而不是加密的更新,那么这就是它的工作原理。

您对原始URL进行哈希处理,然后将文件保存到磁盘(或在任何位置,S3)。该文件具有与哈希相对应的名称。因此,如果URL为“ http://google.com”,则哈希可能为“ C7B920F57E553DF2BB68272F61570210”(MD5哈希),因此您将在服务器上保存“ C7B920F57E553DF2BB68272F61570210” .txt或文件中带有“ http://google.com”作为文件内容的内容

现在,当有人访问http://yourURLShortnener.com/C7B920F57E553DF2BB68272F61570210时,您只需在磁盘上查找该文件并加载内容,然后对该URL进行重定向。

很显然,您希望使用较短的哈希,但是您可以从原始哈希中提取10位数字的子字符串。它增加了哈希冲突的机会,但这只是您承担的风险。