前段时间在网上找到了“lua aes”的解决方案。并且担心它的安全性。
它指出:
-- Do not use for real encryption, because the password is easily viewable while encrypting.
它在其“文件加密测试”脚本中这样说。
我的问题是:
这是为什么,它与加密字符串并将其写入文件有何不同?
加密时怎么能看得见?加密后也能看到吗?
基本上,使用安全吗?
有谁用过,可以确认一下吗?我给原始开发者发了邮件,但电子邮件地址无效。
我应该使用它吗?
最佳答案
我认为做出该建议有两个原因:
- 字符串在 Lua 中是不可变的,所以没有办法用不同的数据覆盖一个字符串 创建后。
- 在 Lua 中,对象是垃圾收集器。垃圾收集器只在特定的点运行 程序,并且应用程序无法判断垃圾收集器何时在不再有对该对象的引用后运行。在此之前,密码字符串将保留在内存中的第 1 点。
看Java的情况,类似Lua:
Why is char[] preferred over String for passwords?
如您所见,使用 char
数组而不是字符串是存储密码的更好方法,因为数组是可变的,并且在完成后可以重新初始化为零。
最接近 char
数组的 Lua 是一个用数字填充的表格。这里密码存储为一个表,而不是一个字符串,其中表中的每个元素都由每个字符的整数表示组成。例如,“pass”
变为 {0x70,0x61,0x73,0x73}
。包含密码的表用于加密或解密后,在程序无法访问之前用零填充并最终被垃圾收集。
根据您的评论,我可能理解有误。也许“文件加密测试”将明文密码与加密文件一起存储,允许任何有权访问该文件的人,甚至是攻击者,都能轻松解密它。不过,以上几点仍然适用。然而,这仍然只是一个猜测。除非您提供指向您提到的加密库的链接,否则我无法确切地知道您的意思。
我查看了 AES 库,担心密码“容易查看”,因为用户通过命令行或终端以纯文本形式键入密码,以启动 Lua 程序,即使程序的输出只包含密文。一种稍微更安全的提供密码的方法是不显示输入(如在 sudo
中所做的那样)或用点或星号屏蔽输入(如在许多网页中所做的那样)。
要么是那个,要么是上面给出的几点可能是唯一合乎逻辑的解释。
关于encryption - lua aes加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9050841/