2012-11-27 212 views
2

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

下面是我在做什么:

require 'openssl' 
cipher = OpenSSL::Cipher::AES256.new(:CBC) 
cipher.encrypt 
puts cipher.random_key 
>> "\xACOM:\xCF\[email protected])<&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== 

感谢您的帮助!

+0

为什么你会显示所有的东西在网页上的加密密钥? Base64没问题,如果你需要安全地往返钥匙。 – 2012-11-27 18:55:19

+0

这不是一个永久的解决方案,并且该页面仅在开发中,未发布。除了每次渲染页面以外,还会生成一个随机密钥,除此之外,任何人都可以使用这个密钥来查看我正在使用的加密库。我只是想生成一个密钥! Base64将两个等号添加到密钥的末尾。我是否将这些内容包含在我将要使用的密钥中?或者我剥去那些?我用过的其他键(已经为我生成)从未包含等号。谢谢回复! – Sean

+1

关键是您的初始原始字节序列。你base64编码它,以避免转移它的问题。不要触摸=。它是字符串的一部分。要使用密钥,您必须反转编码,即解码base64。 – 2012-11-27 19:31:34

回答

0

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

的“==”序列表明,在最后一组中只有一个 字节,“=”表明它包含两个字节。

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

对于Ruby和您的使用情况下的答案是:没问题剥去=