Тройное шифрование DES от javascript до Ruby или другой язык - PullRequest
0 голосов
/ 08 апреля 2020

Я работаю со сторонним сервисом, где они используют 3DES-шифрование с использованием заполнения pkcs7. Прямо сейчас они предоставили мне рабочую версию в javascript. В настоящее время я сталкиваюсь с проблемой при преобразовании JS в Ruby

. Это рабочая версия ruby

var Encrypt3DesAccentiveCode = function (input, sec) {
        var len = sec.length / 2;
        var key1 = CryptoJS.enc.Hex.parse(sec.substr(0, len));
        var key2 = CryptoJS.enc.Hex.parse(sec.substr(len, len));
        var key3 = key1;
        var iv = key2;
        input = CryptoJS.enc.Utf8.parse(input);
        var result = CryptoJS.TripleDES.encrypt(input, key1, { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7, iv: iv });
        result = CryptoJS.TripleDES.decrypt(result, key2, { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.NoPadding, iv: iv });
        result = CryptoJS.TripleDES.encrypt(result, key3, { mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding, iv: iv });
        return (result.ciphertext.toString(CryptoJS.enc.Base64));
    }

. Секрет - A5240DB03E029CFAD369C312ACD4BD66. Данные - TXRAZEZ8. =

Я попытался зашифровать в ruby, первоначально как это

def encrypt(data, key)
  len = key.length / 2
  key1 = "A5240DB03E029CFA"
  iv = "D369C312ACD4BD66"

  cipher = OpenSSL::Cipher.new('DES3')
  cipher.encrypt # Must be called before anything else
  # Generate the key and initialization vector for the algorithm.
  # Alternatively, you can specify the initialization vector and cipher key
  # specifically using `cipher.iv = 'some iv'` and `cipher.key = 'some key'`
  cipher.key = key1
  cipher.iv = iv
  output = cipher.update(data) + cipher.final
  Base64.strict_encode64 output
end

Я также попытался DES-EDE3-CB C, но не смог получить требуемый вывод. Я зарегистрировал каждую строку в JS, чтобы сделать это в ruby, но это дает мне WordArray, а ruby работает по-другому.

Даже если преобразование выполняется в python сценарии, который я могу выполнить файл и получить вывод в ruby.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...