Прежде всего, я не программист на Java. Я ищу пример решения этой проблемы, потому что у меня есть Java-разработчик, который не имеет большого опыта работы с шифрованием. Все, что мы нашли в Интернете, относится к шифрованию веб-страниц и работе с хранилищем ключей MS. Мы просто хотим работать с одной строкой из PowerBuilder (PB) и иметь возможность расшифровывать ее на Java. Ограничение здесь - библиотека MS. Из-за определенных ограничений мы застряли в использовании этого метода шифрования, поэтому от Java зависит, что с ним происходит.
У меня есть программа PB версии 10.2, которая должна вызвать эту утилиту Java и передать ей имя пользователя и пароль. Мы пытаемся зашифровать пароль в виде строки, дружественной к командной строке, так как именно так PB выполнит вызов Java-приложения.
В PB я использую следующий объект:
http://www.topwizprogramming.com/freecode_crypto.html
То, что делает код, - это обертка криптографического API-интерфейса Microsoft, найденного в advapi32.dll. Используемые функции:
CryptAcquireContext
http://msdn.microsoft.com/en-us/library/aa379886(VS.85).aspx
CryptCreateHash
http://msdn.microsoft.com/en-us/library/aa379908(VS.85).aspx
CryptHashData
http://msdn.microsoft.com/en-us/library/aa380202(VS.85).aspx
CryptDeriveKey
http://msdn.microsoft.com/en-us/library/aa379916(VS.85).aspx
CryptEncrypt
http://msdn.microsoft.com/en-us/library/aa379924(VS.85).aspx
Используется поставщик надежного шифрования Microsoft и PROV_RSA_FULL. Код принимает данные, которые должны быть зашифрованы, преобразует их в большой двоичный объект, который затем передается в функции шифрования. Там он получает контекст, создает хеш-объект из контекста, хеширует пароль, получает ключ сеанса из хэша, а затем вызывает шифрование / дешифрование. И наконец, он возвращает возвращенный большой двоичный объект и преобразует его в строку с набором символов ANSI.
Существует целый ряд констант, которые, на первый взгляд, я понимаю, откуда одни берутся, а другие не так много:
Константа String KEY_CONTAINER = "MyKeyContainer"
Константа ULong PROV_RSA_FULL = 1
Константа ULong CALG_MD5 = 32771
Константа ULong CALG_RC4 = 26625
Константа ULong ENCRYPT_ALGORITHM = CALG_RC4
Константа ULong CRYPT_NEWKEYSET = 8
Константа ULong ERROR_MORE_DATA = 234
Независимо от того, делается ли это в версии 1.5 с использованием чего-то вроде BouncyCastle или 1.6 с криптоинтерфейсом Sun для MS, мне все равно, мы просто жаждем увидеть эту работу и честно над головой.
Эй, мне нужно зашифровать строку и сохранить ее в файле, а затем мне нужно снова прочитать файл и расшифровать ту же строку обратно.
Но я не хочу шифровать весь файл. Как только я получил требуемое зашифрованное значение, сохраненное в файле, мне нужно преобразовать это одно в исходную строку.
Не могли бы вы помочь мне с примером кода.