3

我有一个我似乎无法弄清楚的基本问题。我正在尝试在 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 编码。

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

编辑:如果我进行 Base64 编码,这就是它的样子。我应该去掉 = 标志还是什么?

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

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

谢谢您的帮助!

4

1 回答 1

0

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

'==' 序列表示最后一组只包含一个字节,而'=' 表示它包含两个字节。

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

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

于 2015-04-09T20:21:41.437 回答