Как выполнить шифрование 3DES в Ruby?

У меня есть устаревшая система Yii PHP, которая выполняет шифрование 3DES.

$data = 'id=1,username=admin,[email protected]';
$encrypted_key = mhash(MHASH_SHA1,"foo_bar_key");
$encrypted_value = $StringHelper::encrypt($data, $encrypted_key); 
echo $encrypted_value 
//output => "0G8ITzc32wvqpDIjt6O7tZV9VKwU8KK7p0xI%2Fa%2FjiPOR%2FLrpfvsfMg9fyV2vAHgf"

Я пытаюсь получить то же самое зашифрованное значение в Ruby, используя шифрование 3DES, но не могу его получить.

require 'openssl'
require 'mhash'
require 'base64'

@data = "id=1,username=admin,[email protected]"
@encrypted_key = Mhash.sha1("foo_bar_key")

cipher = OpenSSL::Cipher::Cipher.new('des-ede-cbc')
cipher.encrypt
cipher.key = @encrypted_key
output = cipher.update(@data)

puts output 
# output => "\xFC\xCAR\xE2L\xB1\x1A\xCA\x83E\x9C\xEEA\xFD\x9D'I\v\x8E9\xFA4\x14\x1F&\xBFR\x8A\xD3\xBDL\xC64\xABf\xCD\x85\x87\x88^"
#Base64.encode64(output) => "/MpS4kyxGsqDRZzuQf2dJ0kLjjn6NBQfJr9SitO9TMY0q2bNhYeIXg==\n"

Кто-нибудь знает, что я делаю неправильно?

Спасибо.


person Joseph Smitty    schedule 22.12.2014    source источник
comment
попробуйте закодировать его в base64 - ruby-doc.org/ stdlib-2.1.5/libdoc/base64/rdoc/Base64.html   -  person Uri Agassi    schedule 22.12.2014
comment
Не повезло, я получаю вывод в Ruby: /MpS4kyxGsqDRZzuQf2dJ0kLjjn6NBQfJr9SitO9TMY0q2bNhYeIXg==\n   -  person Joseph Smitty    schedule 23.12.2014
comment
stackoverflow.com/questions/4427477/   -  person ptierno    schedule 23.12.2014


Ответы (2)


Мне не удалось найти функцию $StringHelper::encrypt, но если она совместима, вам просто нужно также выполнить cipher.final в коде Ruby и соединить выходные данные update и final, как четко указано в инструкции.

person Maarten Bodewes    schedule 22.12.2014
comment
Помогает, как дела? - person Maarten Bodewes; 24.12.2014

https://www.ruby-forum.com/topic/168731

'man enc' в моей системе говорит:

    des-ede3-cbc       Three key triple DES EDE in CBC mode
    des-ede3           Three key triple DES EDE in ECB mode
  • des3 Псевдоним для des-ede3-cbc

    des-ede3-cfb       Three key triple DES EDE CFB mode
    des-ede3-ofb       Three key triple DES EDE in OFB mode
    
person Nikhil Pingle    schedule 27.02.2015