Как перенести шифрование DES ECB с Python на Ruby - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь переписать функцию шифрования с python на ruby, но не получаю тот же результат.Я знаю, что des ecb небезопасен и не рекомендуется, но необходим для этого переноса с python и ruby.

Используя pyDes в python, у меня есть следующее:

import pyDes
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = pyDes.triple_des(salt, pyDes.ECB, pad=None, padmode=pyDes.PAD_PKCS5)
encrypted = cipher.encrypt(data)
base64.b64encode(encrypted)
'b4SlfbPj6BzFJ2djzu/DTbtmeZ6erKP8'

Теперь я хочу получить тот же зашифрованный текст с рубином:

require "base64"
require "openssl"
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = OpenSSL::Cipher::Cipher.new('DES-ECB')
cipher.encrypt
cipher.padding=0
cipher.key = salt
encrypted = cipher.update(data)
encrypted_final = encrypted + cipher.final
Base64.encode64(encrypted_final)
"pfHDx7yTWZ4vh8+AqiklPrNb+VHhcCyA\n"

1 Ответ

0 голосов
/ 24 сентября 2018

Потратив немного времени на пробные варианты, пока я публиковал вопрос, я нашел решение.Публикуем здесь для справки, если кому-то это поможет - шифр должен был быть DES-EDE3, а заполнение - 1, с новой строкой.

require "base64"
require "openssl"
salt = 'HeresATwentyFourDigtSalt'
data = 'thing to encrypt'
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3')
cipher.encrypt
cipher.padding=0
cipher.key = salt
encrypted = cipher.update(data)
encrypted_final = encrypted + cipher.final
Base64.encode64(encrypted_final).gsub(/\n/, "")
'b4SlfbPj6BzFJ2djzu/DTbtmeZ6erKP8'
...