Шифрование данных из UNIVERSE/U2/PICK

Я извлекаю некоторые данные из системы UNIVERSE и хочу зашифровать их для передачи по электронной почте.

Я не эксперт по ВСЕЛЕННОЙ, поэтому использую фрагменты, которые мы нашли в Интернете, и это «выглядит» так, как будто оно работает, НО я просто не могу расшифровать данные.

Ниже приведен сценарий, который я использовал на основе кода, найденного в Интернете:

RESULT=''
ALGORITHM="rc2-cbc"                     ; * 128 bit rc2 algorithm in CBC mode 
MYKEY="23232323" ; * HEX - Actual Key 
IV=   "12121212"               ; * HEX - Initialization Vector 


DATALOC=1                           ; * Data in String 
KEYLOC=1                            ; * Key in String 
ACTION=5                            ; * Base64 encode after encryption 
KEYACTION=1                         ; * KEY_ACTUAL_OPENSSL 
SALT=''                             ; * SALT not used 
RESULTLOC=1                         ; * Result in String RESULT 
OPSTRING = ''

RETURN.CODE=ENCRYPT(ALGORITHM,ACTION,DATASTRING,DATALOC,MYKEY,KEYLOC,KEYACTION,SALT,IV,OPSTRING,RESULTLOC)
RETURN.CODE = OPSTRING

Ниже приведены несколько строк данных, которые я обработал с помощью этого скрипта, и результирующая строка:

ВХОД 05KI ВЫХОД iaYoHzxYlmM=

ВХОД 05FOAA ВЫХОД e0XB/jyE9ZM=

Когда я пытаюсь декодировать и расшифровывать полученный ВЫВОД с помощью онлайн-расшифровщика, я по-прежнему не получаю никаких результатов: https://www.tools4noobs.com/online_tools/decrypt/

Я думаю, что это может быть проблема с кодировкой символов или, возможно, шифрование не работает, но я понятия не имею, как решить эту проблему — мы работаем над этим в течение нескольких недель и не можем получить данные, которые можно расшифровать...

Все настройки и поля были установлены на основе этого: https://www.dropbox.com/s/ban1zntdy0q27z3/Encrypt%20Function.pdf?dl=0


person php-b-grader    schedule 14.01.2019    source источник
comment
Здесь нет технического объяснения проблемы. Я предлагаю опубликовать свой PHP-скрипт и что-нибудь. Вы получаете пустую строку? Или строка с мусором в ней?   -  person Nick.McDermaid    schedule 14.01.2019
comment
скрипт PHP находится в URL в тексте: tools4noobs.com/online_tools/decrypt   -  person php-b-grader    schedule 14.01.2019
comment
Когда я шифрую с помощью инструмента шифрования, связанного с этим веб-сайтом, я получаю другой результат, поэтому я предполагаю, что ваш алгоритм шифрования Universe не работает. Для 05KI я получаю что-то, что начинается с Ktx. Опубликованный вами вывод выглядит в кодировке Base64.   -  person Nick.McDermaid    schedule 14.01.2019
comment
Имея 9 или 10 входных параметров для вашей функции Universe, вы можете обнаружить, что небольшая настройка одного из них исправит это. Я определенно рекомендую выполнять это действие вне вселенной, если это возможно, если допустимо сначала извлечь данные в незашифрованном виде на диск.   -  person Nick.McDermaid    schedule 14.01.2019
comment
Он закодирован в base64 - см.: ACTION=5 ; * Кодировка Base64 после шифрования. Делать это за пределами вселенной в принципе невозможно по ряду причин.   -  person php-b-grader    schedule 14.01.2019
comment
Он закодирован в base64 - см.: ACTION=5 ; * Кодировка Base64 после шифрования. Делать это за пределами вселенной в принципе невозможно по ряду причин. Я думаю, вы подтвердили мои подозрения, что данные, выходящие зашифрованными rc2-cbc и закодированными base64, не соответствуют ожиданиям.   -  person php-b-grader    schedule 14.01.2019
comment
На этом этапе вам, вероятно, понадобится эксперт по Вселенной.   -  person Nick.McDermaid    schedule 14.01.2019
comment
@php-b-grader из любопытства, какую версию вселенной вы используете? Если вы не уверены, вы можете запустить CT VOC RELLEVEL на TCL. Также вы на самом деле вводите свой ключ и вектор как HEX? Если это так, вам, вероятно, потребуется преобразовать их из HEX в двоичные, прежде чем передавать их в качестве входных данных для ENCRYPT, иначе ключ дешифрования, вероятно, не совпадет. Также, как вы упомянули, ваши настройки будут возвращать результаты в кодировке base64. Поэтому вам нужно будет декодировать перед расшифровкой.   -  person Austin S.    schedule 15.01.2019
comment
Пропустил окно редактирования, но искал эту ссылку, чтобы поделиться: u2devzone .rocketsoftware.com/accelerate/articles/ для примера или базовую документацию UV, которую вы можете найти здесь: rocketsoftware.com/products/rocket-u2/universe-v11.3.1   -  person Austin S.    schedule 15.01.2019
comment
@ОстинС. Ключ на самом деле является текстом в коде (как видно выше) MYKEY=23232323 ; * HEX - Фактический ключ; IV= 12121212 ; * HEX - вектор инициализации; основываясь на ваших комментариях, я собираюсь предположить, что в этом скрипте ничего не преобразуется в шестнадцатеричный (как бы это ни было сделано) ... предоставленная вами ссылка - это то, что мы использовали изначально, НО документ, который я включил, содержит дополнительные ДЕЙСТВИЯ, не включенные здесь, поэтому мы использовали обновленный документ. Документы говорят: КЛЮЧ: либо фактический ключ, либо парольная фраза, либо имя файла, содержащего ключ или парольную фразу.   -  person php-b-grader    schedule 15.01.2019


Ответы (1)


Если я верну зашифрованную строку base-64 из вашего кода обратно в функцию Unidata DECRYPYT с теми же параметрами, она отлично расшифрует.

Подозреваю, что с ключом происходит что-то странное. На этой странице упоминается нечто подобное: https://u2devzone.rocketsoftware.com/accelerate/articles/data-encryption/data-encryption.html «Создание подходящего ключа — одна из самых сложных проблем, связанных с шифрованием. Ключи должны генерироваться в виде случайных двоичных строк, что, очевидно, затрудняет их запоминание. , Соответственно, для приложений, вероятно, более характерно предоставлять фразу-пароль для функции ENCRYPT, а функция генерирует фактический ключ шифрования внутри себя».

Один из вариантов убрать с картинки функцию Universe ENCRYPT — напрямую использовать openSSL. Похоже, что функции ENCRYPT/DECRYPT — это просто тонкие оболочки вокруг библиотеки openSSL, поэтому вы можете выполнить их, чтобы получить результат. У меня проблемы с php-страницей, которую вы используете для проверки, но если я передаю зашифрованную строку base-64 команде расшифровки openSSL на другом компьютере, она расшифровывается нормально.

MYKEY="A long secret key"
DATASTRING="data to be encrypted data here"
EXECUTE '!echo "':DATASTRING:'"| openssl enc -base64 -e -rc2-cbc -nosalt -k "':MYKEY:'"' CAPTURING RESULT
person Ian McGowan    schedule 17.01.2019