У меня есть устаревшая система 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"
Кто-нибудь знает, что я делаю не так?
Благодарю.
Я не смог найти $StringHelper::encrypt
функция, но если она совместима, вам просто нужно выполнить cipher.final
в вашем коде Ruby и объединить вывод update
а также final
как четко указано в инструкции.
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