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

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

$data = 'id=1,username=admin,email=webmaster@example.com';
$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=webmaster@example.com"@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"

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

Благодарю.

0

Решение

Я не смог найти $StringHelper::encrypt функция, но если она совместима, вам просто нужно выполнить cipher.final в вашем коде Ruby и объединить вывод update а также final как четко указано в инструкции.

0

Другие решения

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
    
0