Для работающего проекта мне нужно преобразовать строку в байтовый массив, который затем может быть передан в алгоритм дешифрования AES / CBC / PKCS5. В этом случае мне нужно взять существующий код Java, который выполняет эту работу, и преобразовать его в. NET Код ядра.
Первый шаг в коде Java - это строка:
byte[] decodedBytes = Base64.getDecoder().decode( Utils.getBytes(masterKey) );
Из того, что я нашел при поиске в Google, эта строка в C# должна повторять функциональность.
var masterKeyBytes = Convert.FromBase64String(masterKey);
И они возвращаем очень похожие байтовые массивы.
Первые 10 байтов сгенерированного массива c#: 68 163 160 50 213 109 12 103
Первые 10 байтов сгенерированного массива Java: 68 -93 -96 50 -43 109 12 103
Так что они очень похожи, но если массив Java имеет отрицательные числа, массив c# имеет то же значение, но с добавленным 256.
Являются ли они достаточно различий, чтобы отбросить более поздний код дешифрования (AES / CBC / PKCS5Padding Cipher в Java и AES / CBC / PKCS7Padding AESManaged в. NET Core) В конечном итоге проблема заключается в том, что код Java возвращает расшифрованное значение, my. NET Код ядра возвращает мусор. Поэтому я построчно просматривал код, чтобы попытаться найти различия в выходных данных, и это было первое, что я нажал.
Я не контролирую код Java и не могу его редактировать, поэтому любой Решение должно быть на. NET Только со стороны ядра. Если это невозможно, мне нужно начать весь процесс с нашими сотрудниками из inte rnet, чтобы изменить этот код, и это головная боль, которую я не ожидаю.