1

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

我生成了一个 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 命令行工具加密相同的测试文件

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

我的问题是:为什么我的 Ruby 生成的public-encrypted.txt文件与public-encrypted-cl64.txt? 它是由某些文件系统副作用引起的吗?(即一个是字符串,而另一个是文件或其他东西?)

谢谢。

4

1 回答 1

2

我发现这两者确实可以互操作。只是填充带来了一些随机性,这导致 2 次连续编码将产生 2 种不同的编码数据。

参看。http://en.wikipedia.org/wiki/RSA_%28algorithm%29#Padding_schemes

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

于 2013-03-14T16:53:16.000 回答