你如何testing公共/私人DSA密钥对?

有没有简单的方法来validation给定的私钥是否与给定的公钥相匹配? 我有几个* .pub和几个* .key文件,我需要检查哪些与哪些。

再次,这些是pub / key文件,DSA。

我真的更喜欢某种单线的…

我发现了一种似乎对我更好的方法:

ssh-keygen -y -f <private key file> 

该命令将输出给定私钥的公钥,所以然后将输出与每个* .pub文件进行比较。

我总是使用这些命令比较模数的MD5散列:

 Certificate: openssl x509 -noout -modulus -in server.crt | openssl md5 Private Key: openssl rsa -noout -modulus -in server.key | openssl md5 CSR: openssl req -noout -modulus -in server.csr | openssl md5 

如果哈希匹配,那么这两个文件一起。

对于DSA密钥,请使用

  openssl dsa -pubin -in dsa.pub -modulus -noout 

然后打印公钥

  openssl dsa -in dsa.key -modulus -noout 

显示私钥对应的公钥,然后进行比较。

假设您拥有x.509证书内的公钥,并且假设它们是RSA密钥,那么对于每个公钥,都这样做

  openssl x509 -in certfile -modulus -noout 

对于每个私钥,请执行

  openssl rsa -in keyfile -modulus -noout 

然后按模数匹配键。

使用diff可以使检查更容易:

 diff <(ssh-keygen -y -f <private_key_file>) <public key file> 

唯一奇怪的是,如果文件是相同的,那么diff就什么也不说,所以只有当公共和私人匹配时才会被告知。

删除公钥并从私钥生成新公钥。 将它们保存在不同的目录中,或者使用命名约定来保持它们平直。

所有上面的答案都假设给定的私钥 – 你一无所知,并且想知道它是否与给定的公钥相匹配 – HAS NO PASSPHRASE。 如果私钥有密码,则两者都有

ssh-keygen -y -f PRIVATEKEY

openssl(rsa或dsa)-in PRIVATEKEY -modulus -noout

请求密码。 如果你有一个UNKNOWN私钥,你不知道它是否有密码 – 更不用说密钥有密码了。

所以实际上,值得尝试一下上面的命令,但是如果他们要求input密码,就会卡住:无法提取公钥,并且它的模数与公钥文件的第二个字段匹配。 有谁知道这个方法吗?

如果你在Windows中,想要使用GUI,可以用puttygen将你的私钥导入:

在这里输入图像说明

一旦导入,您可以保存其公钥并将其与您的公钥进行比较。

用公钥encryption一些东西,看看哪个私钥解密了。

这个代码项目文章是由Jeff Atwood在.NETencryption类中实现的一个简化的包装。 假设这些密钥是为了与RSA一起使用而创build的,请使用不对称类与您的公共密钥进行encryption,然后使用您的私钥解密。

只需使用puttygen并将您的私钥加载到其中即可。 提供不同的选项,例如导出核心申请公钥。