【问题标题】:How to get Perl crypt to encrypt more than 8 characters?如何让 Perl crypt 加密超过 8 个字符?
【发布时间】:2019-04-19 07:40:27
【问题描述】:

当使用 Perl crypt 函数时,只有前 8 个字符被加密。有没有办法让它使用更多的字符?

举个例子:

$crypted_password = crypt ("PassWord", "SALT");

$crypted_password = crypt ("PassWord123", "SALT");

返回完全相同的结果。 $crypted_pa​​ssword 具有完全相同的值。

很想使用 crypt,因为它是一些不可逆加密的快速简便的解决方案,但这个限制不会使它对任何严重的事情有用。

【问题讨论】:

  • unix 系统上的标准 DES crypt(3) 函数(perl 的 crypt 是一个包装器)只查看前 8 个字节,是的。 (加上盐只有两个字符)。如果你想要更好的安全性,你必须使用别的东西。
  • 为 Shawn 的评论提供更多来源:来自perldoc -f crypt"创建一个与 C 库中的 crypt(3) 函数完全相同的摘要字符串..."man 3 crypt: "...通过获取密钥的 前八个字符中每个字符的最低 7 位..."。因此就像他说的:如果您需要更安全的东西,请不要使用crypt
  • 我的悲观主义者会说,不要在现代 Perl 发行版中包含“crypt”,因为人们会阅读“crypt”的手册条目并跳过有关它有多安全的部分。一辆出厂时只有一个刹车片的汽车可能是一个非常糟糕的主意。人类喜欢犯错误,并且因跳过或“错过”他们应该阅读的文件的重要部分而臭名昭著......我的 2 美分。

标签: perl crypt


【解决方案1】:

引用the documentation

传统上,结果是一个 13 字节的字符串:salt 的前两个字节,然后是集合 [./0-9A-Za-z] 中的 11 个字节,只有 PLAINTEXT 的前 8 个字节很重要。但其他散列方案(如 MD5)、更高级别的安全方案(如 C2)以及在非 Unix 平台上的实现可能会产生不同的字符串。

所以crypt 的确切返回值取决于系统,但它通常使用只查看密码前 8 个字节的算法。这两件事结合起来使它成为便携式密码加密的糟糕选择。如果您使用的是具有更强加密例程的系统,并且不要尝试在不兼容的系统上检查这些密码,那么您很好。但听起来你正在使用带有旧的糟糕 DES 例程的操作系统。

因此,更好的选择是使用 CPAN 之外的模块,该模块以可预测、更安全的方式进行加密。

一些搜索提供了一些看起来很有希望的选项(我没有使用过,也无法推荐其中一个;我只是在 metacpan 上寻找有希望的关键字):

【讨论】:

    猜你喜欢
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2011-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多