4.1.20 編碼加密處理

如何把某一字串做編碼加密呢?

這裡簡單介紹傳統的加密函式 crypt,用法如下:

語法:

crypt 欲加密的字串,salt;

注意:crypt 只會取用 salt 字串中前二個字元,超過的予以忽略。

例:

#! /usr/bin/perl

print "請輸入您要加密的字串?";
chomp($str=<STDIN>);
print "請輸入任意二個字元?";
chomp($salt=<STDIN>);

$pwd=crypt $str, $salt;

print "$str 的加密結果:$pwd\n\n";

# 可能輸出結果:

請輸入您要加密的字串?larrywall
請輸入任意二個字元?9m
larrywall 的加密結果:9mpSIssRh4Lbs

crypt 可以運用到 /etc/passwd (非 shadow 型) 上,假定 pass 是 /etc/passwd 上已加密過的密碼字串,則以下例子可以比對:使用者輸入的密碼,與 /etc/passwd 中他自己的密碼,是否相符?

chomp($keyin_pwd=<STDIN>);

# $pass 代表由 /etc/passwd 取得的加密密碼
if ((crypt $keyin_pwd, $pass) eq $pass) {
	print "密碼正確!\n";
}

Perl 的 crypt,採用 DES(Data Encryption Standard) 修改過的版本,它是一種單向加密。換言之,您無法由加密後的密文,來反推其原來的明文為何?不過,這並不表示它不能被破解。(常見的攻擊方法之一:字典攻擊法。)