AES-256加密是否一致?

时间:2017-12-03 23:35:36

标签: encryption cryptography aes

我的服务器问题让我问了一个问题 - AES-256加密是否可靠一致?

因此,我的节点服务器,为了避免DDOS漏洞同时保持用户数据匿名,从请求中获取IP,对其进行加密,并存储它在过去24小时内发出请求的次数。

它使用完全相同的密码检查用户是否在过去24小时内通过重新加密 IP来请求。然后,将其与第一个存储的IP匹配。

但是:

Error: Can't find data: /ipcount/d00c526612cec9e5d3e201af35993c75. Stopped at ipcount

d00c526612cec9e5d3e201af35993c75应该是加密的字符串,但数据库表现得像以前从未见过的那样。那么我可以使用相同的密码对其进行加密吗?

提前致谢。

这是加密功能......

const crypto = require('crypto'),
    algorithm = 'aes-256-ctr',
    password = 'aSecureNotSharedOverAForumPassword'

function encrypt(text){
   var cipher = crypto.createCipher(algorithm,password)
  var crypted = cipher.update(text,'utf8','hex')
  crypted += cipher.final('hex');
  return crypted;
}

1 个答案:

答案 0 :(得分:1)

根据Node.js documentation for crypto

  

建议开发人员使用crypto.pbkdf2()自行派生密钥和IV,并使用crypto.createCipheriv()创建Cipher对象。用户不应在crypto.createCipher()中使用具有计数器模式的密码(例如CTR,GCM或CCM)

因此,您遇到的行为本身并不完全是一种定义的行为。我的猜测是底层密码对象是随机生成CTR模式的随机数,因此每次输出都不同。

要解决此问题,请按照文档的建议使用crypto.createCipheriv并自行生成nonce。这样您就可以存储nonce并使用它来生成相同的输出流。