Я использую стороннюю платформу для создания целевой страницы, использование этой конкретной платформы является бизнес-требованием.
На их странице я могу шифровать данные и отправлять их на свой сервер через параметр запроса при вызове ресурса на моем сайте. Это делается с помощью симметричного шифрования AES.
Мне нужно указать пароль, соль (которая должна быть шестнадцатеричной) и вектор инициализации (но быть 16 символов).
Их серверная часть представляет собой платформу .NET. Я знаю это, потому что, если я укажу IV длиннее, чем ожидается, основное исключение:
System.Security.Cryptography.CryptographicException: Specified initialization vector (IV) does not match the block size for this algorithm.
Source: mscorlib
Так, например, на их конце я указываю:
EncryptSymmetric("Hello World","AES","P4ssw0rD","00010203040506070809", "000102030405060708090A0B0C0D0E0F")
Где входы: обычный текст, алгоритм, парольная фраза, соль и IV соответственно.
Я получаю значение: eg/t9NIMnxmh412jTGCCeQ==
Если я попытаюсь расшифровать это со своей стороны, используя JCE или провайдера BouncyCastle, я получу (тот же алгоритм, парольную фразу, соль и IV, с 1000 итераций): 2rrRdHwpKGRenw8HKG1dsA==
, что совершенно другое.
Я просмотрел много разных примеров Java в Интернете о том, как расшифровать AES. Одна из таких демонстраций выглядит следующим образом: http://blogs.msdn.com/b/dotnetinterop/archive/2005/01/24/java-and-net-aes-crypto-interop.aspx
Как я могу расшифровать симметричное шифрование AES, использующее парольную фразу, соль и IV, созданное платформой .NET на платформе Java?
Мне не обязательно иметь возможность расшифровывать содержимое строки шифрования, если я могу сгенерировать ту же подпись на стороне java и сравнить (если окажется, что здесь действительно генерируется хэш).
Я использую JDK 1.5 в производстве, поэтому для этого мне нужно использовать 1.5.
В качестве примечания: во многих примерах на Java необходимо указать количество повторений на стороне java, но не на стороне .NET. Есть ли стандартное количество итераций, которое мне нужно указать на стороне java, которое соответствует выходу .NET по умолчанию.