我的服务器问题让我问了一个问题 - 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;
}
答案 0 :(得分:1)
根据Node.js documentation for crypto
:
建议开发人员使用crypto.pbkdf2()自行派生密钥和IV,并使用crypto.createCipheriv()创建Cipher对象。用户不应在crypto.createCipher()中使用具有计数器模式的密码(例如CTR,GCM或CCM)
因此,您遇到的行为本身并不完全是一种定义的行为。我的猜测是底层密码对象是随机生成CTR模式的随机数,因此每次输出都不同。
要解决此问题,请按照文档的建议使用crypto.createCipheriv
并自行生成nonce。这样您就可以存储nonce并使用它来生成相同的输出流。