Я работаю со сторонним сервисом, где они используют 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.