Lua AES加密

我一段时间前在网上找到了一个“lua aes”解决方案。对它的安全性有一些担忧。

它声称:

-- 不要用于真正的加密,因为密码在加密时很容易被查看。

在它的“文件加密测试”脚本中这样说。

我的问题是:

为什么呢?它与将字符串加密并写入文件有何不同?

在加密的同时,它是如何可查看的?加密后是否也可查看?

基本上,它是否安全可靠?

有没有用过它的人可以证实一下?我向原始开发者发送了邮件,但邮件地址无效。

我是否应该使用它?

原文链接 https://stackoverflow.com/questions/9050841

点赞
stackoverflow用户815724
stackoverflow用户815724

我认为下面有两个原因导致了这个建议:

  1. 在 Lua 中,字符串是不可变的,因此一旦创建后就没有办法用不同的数据覆盖字符串了。
  2. 在 Lua 中,对象是垃圾回收的。垃圾回收器仅在程序的某些点运行,应用程序无法告知垃圾回收器在对象没有更多引用后会在何时运行。在此之前,密码字符串将通过点 1 保留在内存中。

可以看看 Java 的情况,这和 Lua 很相似:

为什么 char[] 优于 String 存储密码?

正如你在那里看到的那样,使用 char 数组而不是字符串存储密码是更好的方式,因为数组可变并且在完成后可以重新初始化为零。

char 数组最接近的 Lua 等效方式是用数字填充的表。在这里,密码存储为表,而不是字符串,每个元素都由每个字符的整数表示组成。例如,"pass" 变成了 {0x70,0x61,0x73,0x73}。在包含密码的表用于加密或解密后,在程序不能到达它并且最终被垃圾回收之前,它被填充为零。


根据您的评论,我可能误解了。也许“文件加密测试”以明文形式存储密码和加密文件,允许任何人,包括攻击者,轻松解密它。尽管如此,上述点仍然适用。但这仅仅是一个猜想,除非您提供您提到的加密库的链接,否则我无法确切地知道您的意思。


我查看了 AES 库,关于密码的“易于查看”问题是因为用户通过命令行或终端以明文形式输入密码启动 Lua 程序,即使程序输出仅包含密文。更安全的提供密码的方法是不显示输入(就像 sudo 的做法)或用点或星号遮蔽输入(就像许多网页的做法)。

要么是上面给出的点可能是唯一合理的解释。

2012-01-29 10:09:17
stackoverflow用户221509
stackoverflow用户221509

你也可以尝试其他方法,比如LuaCrypto,它是一个对OpenSSL的绑定,并且能够使用AES标准加密数据。

2012-01-29 20:51:08