Javascript 如何在nodejs'中存储用于创建密码的iv;s createcipheriv,用于将来的解密?
我对密码学是新手,我正在使用nodejs为一个应用程序提供服务 我的应用程序使用我想在生产前加密的配置文件,当nodejs服务器需要这些文件(在生产中)时,它将解密它们 我正在使用Javascript 如何在nodejs'中存储用于创建密码的iv;s createcipheriv,用于将来的解密?,javascript,node.js,encryption,initialization-vector,node-crypto,Javascript,Node.js,Encryption,Initialization Vector,Node Crypto,我对密码学是新手,我正在使用nodejs为一个应用程序提供服务 我的应用程序使用我想在生产前加密的配置文件,当nodejs服务器需要这些文件(在生产中)时,它将解密它们 我正在使用crypto.createCipheriv(algo,key,iv)加密。算法是:“aes-256-ctr”。密钥是使用密码创建的: const key=crypto.createHash('sha256').update(String(password)).digest('base64').substr(0,32)
crypto.createCipheriv(algo,key,iv)
加密。算法是:“aes-256-ctr”。密钥是使用密码创建的:
const key=crypto.createHash('sha256').update(String(password)).digest('base64').substr(0,32)
iv由以下内容生成:
const iv = crypto.randomBytes(16)
因此,如果我想解密文件,我需要密钥和iv。我存储用于生成密钥的密码(散列),并将其与用户给定的密码进行匹配,但是我如何存储和检索iv
当我将iv(使用fs.writefile和iv常量)写入文件并尝试读取它时,当我尝试解密时,我看到错误:
错误:无效的密钥长度
即使我在服务器中生成并使用iv时,它加密/解密没有任何问题
所以我的问题是:如何存储我用来解密文件的IV?以后尝试解密时如何使用它
是否有更好的方法/实践来加密和解密配置文件?
我想为我的应用程序提供加密/散列的个人数据,如配置数据、用户/密码等
我的路是好的还是走错了方向?我会很感激一些精通加密的用户能帮我
谢谢
所以我的问题是:如何存储我用来解密文件的IV?以后尝试解密时如何使用它
您可以将IV存储为密文的预标部分。解密时,您应阅读iv,然后解密其余内容
示例:
base64(iv)+'.'+base64(encrypted_data)
base64(iv + encrypted_data)
...
是否有更好的方法/实践来加密和解密配置文件
这方面有很多问题/答案。加密配置文件的问题在于,应用程序需要手头的解密密钥。因此,一旦有人访问服务器,他也可以访问解密密钥。但至少您不会将配置凭据放在显而易见的位置
从理论上讲,可以使用TPM来加密密钥本身,但我不知道您是否可以在NodeJS中使用TPM,并且您的应用程序将绑定到特定的主板(通常您不希望这样)
我想为我的应用程序提供加密/散列的个人数据,如配置数据
要将数据传递给应用程序,只需使用SSL。不要使用自己的自定义加密使其复杂化。尽管如此,您可能仍希望对静态数据(存储在文件或数据库中)进行加密,这是加密应该发生的地方
用户/密码等
永远不要存储用户密码。甚至是加密的。验证用户身份的正确方法是。事件,这不是最佳的,但它是我们拥有的最好的。将iv和加密数据base64存储在一个字符串中。例如,
base64(iv)+.+base64(加密数据)
base64被认为是安全的吗?@yishain11安全的原因是什么?Base64是编码(不同的表示),而不是加密(请研究差异)。Base64是一种将二进制数据存储为string@gusto2我应该对数据库中的数据加密两次还是一次就足够了?我使用的是aes 256cbc@kd12345加密两次没有意义。如果加密一次会有任何已知的弱点,那么即使加密100x也不会有帮助。