Ruby OpenSSL AES生成随机密钥

时间:2012-11-27 18:44:10

标签: ruby openssl key aes encryption

我有一个基本问题,我似乎无法弄明白。我正在尝试在AES-256-CBC中生成一个可用于加密/解密数据的随机密钥。

以下是我正在做的事情:

require 'openssl'
cipher = OpenSSL::Cipher::AES256.new(:CBC)
cipher.encrypt
puts cipher.random_key
>> "\xACOM:\xCF\xB3@o)<&y!\x16A\xA1\xB5m?\xF1 \xC9\x1F>\xDB[Uhz)\v0"

这给了我上面的字符串,它看起来不像我过去使用过的键。我对加密非常新,你可能会说,但我想知道我是否需要进一步准备字符串。我在rails中创建了一个快速视图,因此我可以转到/ generate,它将使用随机密钥呈现一个简单的html页面。它甚至不会呈现页面,并抱怨无效的uTF8。我可以让页面显示的唯一方法是首先对Base64进行编码。

我知道我错过了一些愚蠢的东西。任何想法都会很棒。

编辑: 如果我是Base64encode,这就是它的样子。我应该剥离=标志还是什么?

AES-128-CBC
Random Key: 0xdq+IZdmYHHbLC9Uv8jgQ== 
Random IV: vp08d/nFGE3R8HsmOzYzOA==

AES-256-CBC
Random Key: BW0wY5fUkcwszV5GIczI+D45eFOz/Ehvw5XdZIavVOQ= 
Random IV: D0pXdwQAqu+XSOv8E/dqBw==

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

回答你的问题(引自维基百科):

  

&#39; ==&#39; sequence表示最后一个组只包含一个   字节,&#39; =&#39;表示它包含两个字节。

     

理论上,解码时不需要填充字符,因为   可以从Base64的数量计算丢失的字节数   数字。在一些实现中,填充字符是强制性的,   而对于其他人则没有使用它。

对于Ruby和您的用例,答案是:剥离=

没问题