2016-07-06 92 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