Perl中的Openssl字符串解密

Openssl string decryption in Perl

我有一个接受输入字符串的 Perl 脚本。该字符串包含 $ 的符号。该字符串使用 openssl 加密并解密。 encdec 是下面代码片段中加密和解密的字符串。

#! /usr/bin/perl
use strict;
use warnings;

my $input = 'build:$n2cR7cY/$aKv6qQRWjYMIQIyAdTsw6nPtMzEZoqHziqyrL9sn/m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::';

print "Input: $input\n";
my $enc = `openssl enc -base64 -A <<< $input`;
print "Encrypted Output: $enc\n";
my $dec = `openssl enc -base64 -A -d <<< $enc`;
print "Decrypted Output: $dec\n";

输出:

# ./temp.pl
Input: build:$n2cR7cY/$aKv6qQRWjYMIQIyAdTsw6nPtMzEZoqHziqyrL9sn/m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::
Encrypted Output: YnVpbGQ6Ly9tMjlrNW1rUWpnY3daYXJBLjhsQXRlNm1tREdha2lwamV0dUNpSDlZRjJmRjA6MTY3MzY6MDo5OTk5OTo3Ojo6Cg==
Decrypted Output: build://m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::

我面临的问题是解密的字符串与提供给加密的输入字符串不同。我看到 $ 之后的所有字符都被删除了。我可以知道 $ 与这里相似吗?我怎样才能保留整个字符串?

如果你想编码和解码 Base 64 字符串,那么你应该使用 MIME::Base64 模块

代码如下所示

use strict;
use warnings;

use MIME::Base64;

my $input = 'build:$n2cR7cY/$aKv6qQRWjYMIQIyAdTsw6nPtMzEZoqHziqyrL9sn/m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::';

print "Input: $input\n\n";

my $enc = encode_base64($input);
print "Encrypted Output: $enc\n";

my $dec = decode_base64($enc);
print "Decrypted Output: $dec\n";

输出

Input: build:$n2cR7cY/$aKv6qQRWjYMIQIyAdTsw6nPtMzEZoqHziqyrL9sn/m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::

Encrypted Output: YnVpbGQ6JDYkbjJjUjdjWS8kYUt2NnFRUldqWU1JUUl5QWRUc3c2blB0TXpFWm9xSHppcXlyTDlz
bi9tMjlrNW1rUWpnY3daYXJBLjhsQXRlNm1tREdha2lwamV0dUNpSDlZRjJmRjA6MTY3MzY6MDo5
OTk5OTo3Ojo6

Decrypted Output: build:$n2cR7cY/$aKv6qQRWjYMIQIyAdTsw6nPtMzEZoqHziqyrL9sn/m29k5mkQjgcwZarA.8lAte6mmDGakipjetuCiH9YF2fF0:16736:0:99999:7:::