Расшифруйте зашифрованный файл cobol с помощью comp-3 и других данных. - PullRequest
0 голосов
/ 20 июня 2019

У меня есть файл cobol, который не в удобочитаемом формате: он содержит данные (числа) в формате comp-3, но также и другие строки и символы. У меня есть алгоритм для преобразования формата comp-3, но когда я применяю его к массиву байтов из файла, все символы преобразуются, и вывод не является правильным. Как правильно декодировать весь файл, принимая во внимание как данные comp-3, так и обычные данные?

Я добавлю несколько строк из файла ниже, а также мой алгоритм для comp-3:

Файл в Notepad ++ выглядит так (первые строки):

AH4820øêæÉ * 200 DBAG DBAG 0
AED S EUR AED S KAS ° ø 2 ø TN ¤ § §É! SN ¤¤

Файл в Notepad ++ с преобразованным ASCII в HEX выглядит следующим образом, хотя это не должно быть правильно:

200F41483438323002C3B8C3AA01C3A6 01C3892A202020202020202020202020 20203230302044424147204442414720 30202020202020202020202020202020

   public static String unpackData(byte[] packedData) {
    String unpackedData = "";

    final int negativeSign = 13;
    for (int currentCharIndex = 0; currentCharIndex < packedData.length; currentCharIndex++) {
        byte firstDigit = (byte) ((packedData[currentCharIndex] >>> 4) & 0x0F);
        byte secondDigit = (byte) (packedData[currentCharIndex] & 0x0F);
        unpackedData += String.valueOf(firstDigit);
        if (currentCharIndex == (packedData.length - 1)) {
            if (secondDigit == negativeSign) {
                unpackedData = "-" + unpackedData;
            }
        } else {
            unpackedData += String.valueOf(secondDigit);
        }
    }
    return unpackedData;
}

Ответы [ 2 ]

3 голосов
/ 20 июня 2019

... зашифрованный файл cobol с comp-3 и другими данными ... не в удобочитаемом формате

Не смешивайте два.Зашифрованный файл может быть фактически читаемым человеком (просто не содержащим разумных вещей), когда шифрование происходит путем обмена словами.Не в удобочитаемом формате не имеет ничего общего с шифрованием (и я не понимаю, почему это помечено как весна).

Вернуться к первоначальному вопросу:

КакМогу ли я правильно декодировать весь файл, принимая во внимание как данные comp-3, так и обычные данные?

Вы разбили массив байтов на диапазоны "normal" (в вашем случае, я думаю, вы имеете в виду распакованный, оченьвероятно в однобайтовой кодировке) и «закодированных» (упакованных) данных.

Затем преобразуйте распакованные данные либо в String (фактически UTF-16), либо в числовой тип и упакованные данные (не проверено)если ваша распаковка comp-3 правильная, но выглядит нормально, по крайней мере, не совсем неправильно [иначе, 13 может быть не единственным возможным маркером отрицательного знака, но это зависит от системы генерирования данных]) для числовых типов.

COBOL основан на записях, в основном с фиксированной длиной, поэтому ключом к «декодированию файла» является разбиение файла на записи и поля ( получить исходное определение записи COBOLна ).В большинстве случаев вы создали бы pojo с теми же атрибутами, что и в определении COBOL, и получили бы фрагмент кода, разбивающий байтовый массив на записи и поля по позициям, преобразовав части по мере необходимости и вызвав ваши сеттеры с результатом.удобочитаемый для человека: простой подход может заключаться в создании метода toString ...

1 голос
/ 21 июня 2019

Редактирование файла

Любой шестнадцатеричный редактор, поддерживающий EBCDIC, должен иметь возможность отображать файл в режиме чтения. Википедия предлагает HxD, VEdit, UltraEdit, WinHex - это шестнадцатеричные редакторы, поддерживающие Ebcdic.

Другой альтернативой является recordEditor . Он может отображать файл с / без тетради Кобола.

enter image description here

JRecord

JRecord позволяет читать / писать мэйнфреймы с помощью Cobol Copybook.Вы можете сгенерировать базовый код Java ~ JRecord в recordEditor

См. Как создать код java ~ jrecord для тетради Cobol

...