perl - Perl Blowfish/CBC 加密和解密函数
问题描述
这里是 Perl 和密码学的新手。有没有人有任何简单的加密/解密函数(使用 Blowfish 或 CBC)来封装所有底层的脏工作?我想使用一个固定的 KEY 并能够传递任意长度的字符串进行加密。
为清楚起见,我想使用 Encrypt 函数加密凭据,将结果保存在某处,并在需要时对其进行解密......一直使用相同的密钥。
我基本上想这样做:
$fixedKey = "0123456789ABCDEF";
$plainText = "A string of any length..........";
$encryptedString = Encrypt($fixedKey, $plainText);
$retrievedText = Decrypt($fixedKey, $encryptedString);
赞赏。
解决方案
以下使用 Crypt::CBC 进行加盐、填充和链接,并使用 Crypt::Rijndael (AES) 进行加密。
use strict;
use warnings;
use feature qw( say );
use Crypt::CBC qw( );
sub encrypt {
my ($key, $plaintext) = @_;
my $iv = Crypt::CBC->random_bytes(16);
my $cipher = Crypt::CBC->new(
-cipher => 'Rijndael',
-literal_key => 1,
-key => $key,
-iv => $iv,
-header => 'none',
);
return $iv . $cipher->encrypt($plaintext);
}
sub decrypt {
my ($key, $ciphertext) = @_;
my $iv = substr($ciphertext, 0, 16, '');
my $cipher = Crypt::CBC->new(
-cipher => 'Rijndael',
-literal_key => 1,
-key => $key,
-iv => $iv,
-header => 'none',
);
return $cipher->decrypt($ciphertext);
}
{
my $key = Crypt::CBC->random_bytes(32);
say "Key: ", unpack "H*", $key;
my $expect = 'secret';
say "Plaintext: $expect";
my $ciphertext = encrypt($key, $expect);
say "Ciphertext: ", unpack "H*", $ciphertext;
my $got = decrypt($key, $ciphertext);
say "Plaintext: $got";
say $expect eq $got ? "ok" : "not ok";
}
推荐阅读
- excel - 使用 Excel VBA 从单元格中提取文本
- javascript - 在 JavaScript 中获取 Json 中的字典
- node.js - 无服务器离线 - 本地 dynamoDb 上的迁移不起作用
- java - JAVA - 在 excel (.csv) 中从列表创建格式化表格
- python - 网络抓取亚马逊价格的问题
- c++ - C++ UE4 - bool vs. uint8 : 1 vs. uint32 : 1 - 各自的优缺点?
- r - 子集由空行分隔的 R data.table
- spring-boot - 我们可以使 Spring JPA 规范与 EntityGraph 一起使用吗?
- android - com.google.firebase.database.DatabaseException:在类 android.view.animation.AccelerateDecelerateInterpolator 上找不到要序列化的属性
- python - 排序值和值高于 1 个熊猫