2016-07-06 88 views
1

我正在嘗試查找Perl解決方案來識別密鑰的類型。 我有一個關鍵文件列表,我需要知道哪些是DSA,哪些是RSA。使用Perl識別DSA/RSA密鑰

我知道我可以用下面的命令做在Linux上:

ssh-keygen -lf id_dsa.pub 

我試圖找到一個純Perl的解決方案,能夠在Windows和Linux的工作。

謝謝。

+0

會有RFC或其他規範文件,在那裏,描述一下這些按鍵的樣子。一旦你有他們,你應該能夠爲他們實現解析器。 – simbabque

+0

你有沒有看過公鑰文件中的內容?因爲如果你這樣做,你的問題的答案將是顯而易見的! – salva

回答

0

您可以使用File::LibMagic,它使用與unix file命令相同的庫。

在Ubuntu,我安裝了它:

apt-get install libmagic-dev 

cpan File::LibMagic 

對於Windows,它是已知Cygwin的工作,並應與窗戶工作,如果你可以安裝libmagic庫。我沒有嘗試過,所以YMMV。

#!/usr/bin/env perl 

use warnings; 
use strict; 

use File::LibMagic; 

my $magic = File::LibMagic->new(); 

my $key_dsa = '/home/felix/.ssh/id_dsa.pub'; 
my $info_dsa = $magic->info_from_filename($key_dsa); 
print "[ $key_dsa ] : " . $info_dsa->{description} . "\n"; 

my $key_rsa = '/home/felix/.ssh/id_rsa.pub'; 
my $info_rsa = $magic->info_from_filename($key_rsa); 
print "[ $key_rsa ] : " . $info_rsa->{description} . "\n"; 

輸出

[ /home/felix/.ssh/id_dsa.pub ] : OpenSSH DSA public key 
[ /home/felix/.ssh/id_rsa.pub ] : OpenSSH RSA public key 
+0

謝謝你的解決方案。不幸的是,對於Windows而言,它需要我試圖避免使用的Cygwin。 – Andrey

+0

你有沒有嘗試在Windows上安裝libmagic? – xxfelixxx

+0

是的,我做到了。由於某些依賴關係,安裝在兩個不同的Windows環境中失敗。 – Andrey