在perl中加密/解密



我正试图让脚本对用户更友好,因为它每次都要求我输入密码。我想输入密码,将其写入加密的文件,然后解密后读回。

我在谷歌上搜索了一下,所以我试图把它输入。不幸的是,decode_base64没有返回我输入的密码。

Is希望在perl中有一种非常简单的加密/解密方法。有人能帮我吗?

作为参考,我所做的调整

加密:

my $msg = "Enter password for ".$ENV{'USERNAME'}.": ";
UTILS_print( $msg );
# Do not show the password 
ReadMode('noecho');
chomp($password = ReadLine());
ReadMode('normal');
# Store encrypted password 
if (open(FILE, '>', "$pwdFile")) {

my $hidden = crypt $password, join "",  
('.', '/', 0..9, 'A'..'Z', 'a'..'z') [rand 64, rand 64]; 
print FILE $hidden;
close(FILE);
}

解密:

# Use a stored password when no password is set during start of script
my $pwdFile = 'c:/Localdata/nexus_upload_'.$ENV{'USERNAME'}.'.pwd';
if ( $password eq '' ) {
if ( -e "$pwdFile"  ) {
if (open(FILE, "$pwdFile")) {
my @lines = <FILE>;
close(FILE);
$password = $lines[0];
chomp $password;
$password = decode_base64($password);
}
}
}

来自crypt()函数的文档:

密码PLAINTEXT,SALT

创建一个与C库中的crypt(3(函数完全相同的摘要字符串(假设你实际上有一个版本没有作为潜在的弹药被根除(。

crypt是一个单向散列函数。PLAINTEXT和SALT被转换成一个短字符串,称为摘要,然后返回。相同的PLAINTEXT和SALT将始终返回相同的字符串,但没有(已知的(方法从哈希中获取原始PLAINTEXT。PLAINTEXT或SALT中的小变化将导致摘要中的大变化。

没有解密功能。这个函数对密码学并不那么有用(为此,请在附近的CPAN镜像上查找Crypt模块(;crypt";有点用词不当。相反,它主要用于检查两段文本是否相同,而不必传输或存储文本本身。一个例子是检查是否给出了正确的密码。存储的是密码摘要,而不是密码本身。用户键入一个密码,该密码使用与存储摘要相同的盐进行加密。如果两个摘要匹配,则密码是正确的。

注意,它说";不存在解密功能";。

你从中获取此代码的网页在胡说八道。如果您从该页面运行示例代码,则会得到以下输出:

Encrypted Password :: B2rm1NvmFuLww
Decrypted Password :: j������
Password In Plain Text :: GeeksforGeeks

它不起作用。

MIME::Base64中的decode()函数是同一模块中encode()函数的逆函数。你可以用它来";伪装;您的密码在磁盘上的一个文件中,但它肯定不是加密的,也不会增加任何安全性。

或者,遵循文档中的建议并查看";地穴;命名空间。

最新更新