Как выполнить вычисления Triple DES в Ruby в шестнадцатеричном формате? - PullRequest
1 голос
/ 30 июня 2010

Я пытаюсь сделать тройное шифрование DES в Ruby. Я пытаюсь повторить результаты с этой страницы: 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 Ответ

4 голосов
/ 23 октября 2010

Ключ в шестнадцатеричном виде - если вы посмотрите на вставленную вами 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"]
...