Расшифровка TripleDES работает, но посередине есть зашифрованный текст - PullRequest
1 голос
/ 22 июня 2019

Я работаю над расшифровкой того, что не создал. Авторы зашифровали его из Java-программы, и я пытаюсь расшифровать его в C #. Они дали мне логику своего шифрования (массив целочисленных ключей, тип кодировки и TripleDES), и я пытался это выяснить.

Короче говоря, Мне удалось расшифровать большую часть текста, однако середина всегда зашифрована.

Я много исследовал это, пытаясь выяснить это, в частности, проблему отрицательных байтовых чисел Java . Это может быть причиной того, что мое дешифрование частично работает, потому что половина моих заданных целых чисел Java-ключа отрицательна. Однако даже когда я вручную изменяю номер байта в соответствии с эквивалентом C # или использую BitConverter, я все равно получаю тот же зашифрованный результат.

Другое дело, что я не могу получить кодировку UTF-8, обеспечивающую лучшие результаты, чем ASCII.

Код. Я сохраняю свои 24-байтовые целые числа (в виде строк) в App.Config и преобразую их в целые числа в коде:

Я перебираю все строки, чтобы получить нужный байтовый массив: (ipstr - это n-тая строка в цикле)

int dii = Convert.ToInt32(ipstr);
byte[] intBytes2 = BitConverter.GetBytes(dii);
if (BitConverter.IsLittleEndian)
    Array.Reverse(intBytes2);
byte[] result = intBytes2;

Затем я использую 4-й индекс в диалоге байтов, чтобы сохранить полностью преобразованный байтовый массив для расшифровки tripleDES.

FinalByteArr[j - 1] = result[3];

Это похоже на большую работу, но он возвращает мои отрицательные строковые ключи из Java в массив байтов C # 0-256.

Затем я получаю все байты из их выходного файла:

string path = @"E:\file.txt";
byte[] b1 = File.ReadAllBytes(path);
TripleDESCryptoServiceProvider objDESCrypto = new TripleDESCryptoServiceProvider();
MD5CryptoServiceProvider objHashMD5 = new MD5CryptoServiceProvider();
byte[] byteHash, byteBuff;
objHashMD5 = null;
objDESCrypto.Key = FinalByteArr;     
objDESCrypto.Mode = CipherMode.ECB;  
objDESCrypto.Padding = PaddingMode.PKCS7;
byteBuff = b1;  
string strDecrypted = ASCIIEncoding.ASCII.GetString(objDESCrypto.CreateDecryptor().TransformFinalBlock(byteBuff, 0, byteBuff.Length));

Странно то, что это работает, и мой файл расшифровывается для большинства символов. В расшифрованном тексте есть очевидные слова и цифры. Но около 30% средних символов перемешаны. Я перепробовал все зашифрованные и дополнительные режимы без каких-либо улучшений.

Я не могу опубликовать фактический результат из-за конфиденциальности, но это выглядит примерно так:

PK   \2\5\1\5\1\8\2\4\2\0\?n?\Rotate??????????????%??8p??(u??Z??%??8p??(u??Z??%??8p??(u??Z\0\0\0\0\0\0\0\0\0\0\0\RotatePKRotate

Даже когда я использую кодировку UTF-8 для последней строки, я получаю тот же искаженный беспорядок в середине, но вместо вопросительных знаков я получаю множество уникальных символов.

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

...