为什么我在Ruby和命令行OpenSSL之间获得不同的RSA加密文件?

时间:2013-03-14 15:15:07

标签: ruby encryption openssl rsa

我尝试在一方用Ruby时测试openssl的互操作性,另一方面用命令行测试。

我生成了一个RSA证书并以这种方式提取了它的公钥:

openssl req -x509 -nodes -days 1825 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
openssl rsa -in mycert.pem -pubout > mycert.pub

我编写了一个执行两件事的Ruby脚本:

  1. 首先用公钥对测试文件进行编码/解码,然后用私钥进行编码/解码(在RSA编码的基础上使用Base64编码,以便更轻松地进行网络通信)
  2. 它运行系统命令以使用openssl命令行工具
  3. 加密相同的测试文件

    您可以在以下要点中找到此Ruby脚本的代码:https://gist.github.com/dirtyhenry/4673331(参见poc-openssl-rsa.rb文件)

    我的问题是:我的Ruby生成的public-encrypted.txt文件与public-encrypted-cl64.txt有何不同?是由一些文件系统副作用引起的吗? (即,当另一个是文件或其他东西时,一个是字符串?)

    感谢。

1 个答案:

答案 0 :(得分:2)

我发现这两者确实具有互操作性。只是填充带来一些随机性,导致2个连续编码将导致2个不同的编码数据。

比照http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Padding_schemes

  

实际的RSA实现通常嵌入某种形式的结构化随机化   在加密之前填充到值m。