使用反引号Perl捕获SSL输出

时间:2012-10-16 09:41:32

标签: perl opensl

我可能只是简单地看着这个,我不确定我想做什么是可能的,但这有望节省大量时间,不必读入和读出不同的文件。

我想做的是使用反引号来接收OpenSLL exe的输出,它将加密字符串的某个部分。然后使用输出将其添加到另一个文件中。 OpenSLL将自动输出到文本文件。

例如:

Sample text: 1234, test text
ID- 1234, 
Encrypted text- test text

然后

ID- 1234, 
Returned encrypted text- **&&**&&
And then be output to a file
1234, **&&**&&

我知道这可以通过读入和解析加密文本然后将输出附加到新文件来完成,但是当我想要为100或1000行执行此操作时,我希望避免这样做,因为它将是一个很多额外的处理。

希望你能看到我的想法,如果有人能提供帮助,我将非常感激。

#!/usr/bin/perl -w
use strict;

my $OpenSLLFile = "\\openssl.exe";

my $publickey = "public.pem";
my $privatekey = "private.pem";
my $inputtext = "output.txt";
my $outputtext = "abcd.txt";
my $compID = "1232";

my $encryptiontext = "openssl rsautl -encrypt -pubin -inkey $publickey -in $inputtext -out $outputtext";
my $decryptiontext = "openssl rsautl -decrypt -inkey $privatekey -in encrypted.txt -out plaintext.txt";

#Idea 1
#my $test = `$encryptiontext`;

#Idea 2    
#my $test = system ("$encryptiontext");

#Idea 3
`$encryptiontext`
my $test =  $?;

open (outputtest, '>>outputtest.txt') or die "$!";

my $a = "$compID, $test";

print outputtest "$a\n";

close(outputtest);

2 个答案:

答案 0 :(得分:1)

您拼凑在一起的openssl命令正在写入某些输出文件(-out参数之后的文件)。因此,如果您想要输出,您有两个选择:

  1. 读取openssl写入
  2. 的文件的输出
  3. 让openssl写入标准输出并使用反引号运算符直接在Perl中捕获。
  4. 第二个版本避免了临时文件和与之相关的所有麻烦(例如,必须删除它们,失败与否;确保没有解密的内容保留在文件系统中的其他用户可以读取的地方等等)。

    通过从命令中删除-out ...参数,这应该是微不足道的。然后你可以像你的想法一样捕捉文字:

    my $encrypt_commnad = "openssl rsautl -encrypt -pubin -inkey $publickey -in $inputtext";
    my $encrypted_text  = `$encrypt_command`;
    

答案 1 :(得分:1)

number of modules on CPAN进行OpenSSL加密和解密。使用其中一个模块可能比尝试使用系统命令自行滚动更容易。