perl函数说明(crypt)

crypt
   crypt PLAINTEXT, SALT

这个函数用和 crypt(3) 完全一样的方法计算一个字串的单向散列。这个功能对于检查口令文件中是否有极烂的口令很有用,(注:只有那些具有诚实的意图的人才可以做这些事情。)尽管你真正想干的事情是防止人们在一开始就使用糟糕的口令。

crypt 是有意做成一个单向函数的,和打破鸡蛋炸煎鸡蛋一个道理。目前没有(已知)的办法解密一个加了密的口,只能用穷举法的强行猜测方法。

当验证一个现有的加密字串的时候,你应该用该加密的文本做 SALT(象 crypt($plain, $crypted) eq $crypted)。这样就令你的代码和标准 crypt 兼容,并且还可以有更多奇特的实现。

当你选择一个新的 SALT 的时候,你最少需要创建一个两字符长的随机字串,它的字符来自集合 [./0-9A-Za-z](类似 join ' ', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64])。更早的 crypt 的实现只需要 SALT 的头两个字符,不过我们现在认为那些只给出头两个字符的代码是不能移植的。参阅你本地的 crypt(3) 手册页获取更多有趣的细节。

下面是一个例子,它可以证实哪个运行此程序的人知道他们自己的口令:

   $pwd = (getpwuid ($<))[1];   # 假设我们在 Unix 上。

   system "stty -echo";      # 或者看看 CPAN 上的 Term::ReadKey
   print "Password: ";
   chomp($word = );
   print "\n";
   system "stty echo";

   if (crypt($word, $pwd) ne $pwd) {
      die "Sorry...\n";
   } else {
      print "ok\n";
   }

当然,向任何问你索要口令的东西键入你的口令都是不明智的举动。

影子口令文件比传统的口令文件稍微更安全些,并且如果你想访问它们的话那么你就必须是超级用户。因为很少的几个程序才能运行在这样强大的权限下,所以你可能需要让程序维护它自己独立的认证系统,方法是把 crypt 字串保存在与 /etc/passwd 和 /etc/shadow 不同的地方。

crypt 函数不适合做大量数据的加密,更重要的是因为你不能取回数据。查看你喜爱的 CPAN 的 by-module/Crypt 和 by-module/PGP 目录寻找一些可能有用的模块。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值