如何在Ruby中以十六进制执行Triple DES计算?

时间:2010-06-30 12:39:20

标签: ruby encryption openssl 3des

我正在尝试在Ruby中进行一些三重DES加密。我正在尝试复制此页面的结果:http://da.nmilne.com/des.html

我正在尝试在Ruby中复制这些结果。我怀疑问题是密钥应该是一个字符串,但我需要传入十六进制密钥。要么加密的字符串格式错误。或者两者都有。 : - )

require 'openssl'
des = OpenSSL::Cipher::Cipher.new("des-ede-cbc")
des.encrypt
des.key="23232323232323234545454545454545"
des.update("0000000000000000")
res=des.final
res.unpack('H*')  
=> ["5045c5d37ca4d13b"]

但它应该是:

=> ["3a42d7a1d1c60c40"]

关于我哪里出错的指示?

1 个答案:

答案 0 :(得分:4)

键是十六进制的 - 如果你查看粘贴的Java页面,你可以通过解码详细输出中的键的二进制值来轻松地看到它。

>> des_cbc=OpenSSL::Cipher::Cipher.new("des-ede-cbc")
=> #<OpenSSL::Cipher::Cipher:0x10116ce28>
>> des_cbc.encrypt
=> #<OpenSSL::Cipher::Cipher:0x10116ce28>
>> des_cbc.key="\x23"*8 << "\x45"*8
=> "########EEEEEEEE"
>> des_cbc.update("\x00"*8).unpack('H*')
=> ["3a42d7a1d1c60c40"]