我是加密技术的新手,我正在使用nodejs来提供应用程序。
我的应用使用我想在生产前对其进行加密的配置文件,当nodejs服务器在生产中需要这些文件时,它将对其解密。
我正在使用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 const)写入文件并尝试读取时,尝试解密时看到错误:
错误:密钥长度无效
即使我在服务器中生成并使用iv时,它也会进行加密/解密而没有任何问题。
所以我的问题是:如何存储用来以后解密文件的IV?以后在尝试解密时如何使用它?
是否有更好的方法/做法来加密配置文件并对其进行解密? 我想为我的应用提供加密/散列的个人数据,例如配置数据,用户/密码等。
我的方法是好方法还是错误的方向?我将不胜感激,一些精通加密的用户可以帮助我...
谢谢
答案 0 :(得分:2)
所以我的问题是:如何存储我以后用来解密文件的IV?以后在尝试解密时如何使用它?
您可以将IV作为预存储在密文中的部分进行存储。解密时,您应阅读iv,然后解密其余的
示例:
logging.info("query successfully inserted %d values into the table",no_of_records)
是否有更好的方法/做法来加密配置文件并解密它们?
关于SO的问题很多。加密的配置文件的问题在于应用程序需要手头的解密密钥。因此,一旦有人访问了服务器,他也可以访问解密密钥。但是至少您不会轻易忘记配置凭据。
理论上-可以使用TPM本身对加密密钥进行加密,但是我不知道您是否可以在NodeJS中使用TPM,并且您的应用程序也将绑定到特定的主板上(通常您不希望这样做) )。
我想为我的应用提供加密/散列的个人数据(例如配置数据)
要将数据传递到应用程序,只需使用SSL。不要使用自己的自定义加密使它复杂化。您仍然可能希望对静态数据(存储在文件或数据库中)进行加密,这就是应该进行加密的地方。
用户/密码等
永远不要存储用户密码。甚至加密。验证用户身份的正确方法是salted slow hash。事件并非最佳,但它是我们所拥有的最好的。