我有一個程序在文件中用Blowfish加密,第二個perl程序提示用於解密成字符串的密碼,我不想把解密後的源文件寫入硬盤驅動器,儘管將它解密到內存中並不是一個真正的問題,因爲運行該程序的用戶已經知道了源碼。我想我可能會使用eval,但我需要運行的程序有很多輸入/輸出使用Curses和東西,所以eval不會工作,因爲它只返回最後一個值...有沒有人有任何想法如何能夠完成?從Perl中的字符串執行整個perl程序
2
A
回答
2
您可以使用@INC
鉤子執行解密。那麼你可以簡單地使用require
或use
這個加密程序。例如,
# loader.pl
use Crypt::Rot13 ;
use File::Spec ;
sub decrypt_line {
if ($_ ne '') {
my ($self, $state) = @_;
my ($crypt, $key) = @$state;
$crypt->charge($_);
($_) = $crypt->rot13($key);
return 1;
}
}
sub load_crypt {
my ($self, $filename) = @_;
print "Key?\n";
chomp(my $key = <STDIN>);
for my $prefix (@INC) {
open my $fh, '<', File::Spec->catfile($prefix, "$filename.r13") or next;
return ($fh, \&decrypt_line, [Crypt::Rot13->new(), $key]);
}
}
BEGIN {
unshift @INC , \&load_crypt;
}
require 'hello.pl';
# hello.pl.r13
cevag "Uryyb, jbeyq!\a";
$ perl loader.pl Key? 13 Hello, world!
0
剛開始一個單獨的Perl實例,並使用標準輸入程序傳遞給它,就像這樣:
echo 'print 2+2 . "\n";' | perl -
用Perl代碼:
open(P,"|perl -") || die "Failed: $!\n";
print P 'print 2+2 . "\n"'
+0
SOOOO我做的第一件事就是試試這個,可惜一些事情似乎完全凍結了我的終端,就像我無法輸入任何東西,沒有控制字符工作等,只修復方法是打開另一個終端並殺死解釋器.... sooooo。另外,當我試圖評估整個程序的字符串時,在終端中沒有任何事情發生,程序運行並結束,我沒有出現任何輸出等。 – rolands
1
沒有理由eval
不會爲工作你描述的是什麼。雖然它只返回一個值,但並不妨礙已評估的代碼與終端進行交互。它通常不會以這種方式使用,但您的使用案例是使用字符串eval
的合法理由。 (請注意,您仍然可能會將源代碼寫入交換文件。)
相關問題
- 1. 的Perl從字符串
- 2. 從字符串在Perl
- 3. 刪除perl中的多個子字符串來自perl的字符串
- 4. perl字符串中的行數
- 5. 從specman執行perl
- 6. 從Perl執行Powershell
- 7. 在Perl中執行外部程序
- 8. 在子目錄中執行Perl程序?
- 9. Perl字符串Modyifing
- 10. 如何從Perl中的字符串中提取子字符串?
- 11. 使用Perl替換一個字符串整行
- 12. 如何在Perl程序中將行換行爲45個字符?
- 13. Perl Text :: CSV_XS從字符串中讀取
- 14. cygwin perl子程序無序執行
- 15. 的Perl:字符串中子字符串或子字符串中
- 16. Perl從匹配的字符串中刪除換行符
- 17. 從Perl中的字符串生成子字符串
- 18. 如何從perl中的這個字符串中刪除數字?
- 19. 簡單的Perl程序未能執行
- 20. 排序字符串+數字在Perl
- 21. 如何在perl中從網站執行一個perl腳本?
- 22. 按perl字符串的子集排序
- 23. 從perl運行linux中的程序
- 24. Json的Perl字符串
- 25. perl的字符串操作
- 26. Perl替換字符串中的第n個子字符串
- 27. perl中的字符串串聯
- 28. Perl:比較字符串中的數字
- 29. 程序沒有從perl中的其他目錄執行
- 30. 運行perl程序從C++程序
Heeey,所以這是令人敬畏的!和我所需要的,這是一個完全不相關的問題,我用它來創建我的密碼對象 'my $ cipher = Crypt :: CBC-> new(-key => $ key,-cipher =>'Blowfish') ;' 但是這條線似乎打破了循環,並沒有得到任何進一步移動到下一個對象。我似乎無法弄清楚哪裏有一個地方讓我找到錯誤等......最近怎麼樣 – rolands