0

何よりもまず、私は Java プログラマーではありません。私が持っている Java 開発者は暗号化を扱った経験があまりないため、この問題の解決策の例を探しています。私たちがオンラインで見つけたものはすべて、Web ページの暗号化と MS キーストアの処理に関するものです。PowerBuilder (PB) から単一の文字列を操作し、それを Java で復号化できるようにしたいだけです。ここでの制限は、MS ライブラリです。特定の制限により、この暗号化方法の使用に固執しているため、スローされたものを処理するのは Java 側に任されています。

私が持っているのは、この Java ユーティリティを呼び出してユーザー名とパスワードを渡す必要がある PB バージョン 10.2 プログラムです。PB が Java アプリを呼び出す方法として、コマンド ラインに適した文字列としてパスワードを暗号化しようとしています。

PB では、次のオブジェクトを使用しています: http://www.topwizprogramming.com/freecode_crypto.html

コードが行っていることは、advapi32.dll にある Microsoft 暗号化 API をラップすることです。使用する機能は次のとおりです。

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 Strong Cryptographic Provider と PROV_RSA_FULL を使用しています。このコードは、暗号化するデータを受け取り、それを BLOB に変換してから、暗号化関数に渡します。そこで、コンテキストを取得し、コンテキストからハッシュ オブジェクトを作成し、パスワードをハッシュし、ハッシュからセッション キーを取得してから、encrypt/decrypt を呼び出します。最後に、返された BLOB を受け取り、それを ANSI 文字セットの文字列に変換します。

いくつかの定数がどこから来ているかが一目でわかりますが、他の定数はそれほど多くありません。 ULong CRYPT_NEWKEYSET = 8 定数 ULong ERROR_MORE_DATA = 234

これが BouncyCastle のようなものを使用して 1.5 で行われるか、MS 用の Sun 暗号化インターフェイスを使用して 1.6 で行われるかは気にしません。


ちょっと、文字列を暗号化してファイルに保存する必要があります。次に、ファイルを再度読み取り、同じ文字列を復号化する必要があります。しかし、ファイル全体を暗号化したくありません。必要な暗号化された値をファイルに保存したら、それを元の文字列に変換する必要があります。サンプルコードを教えてください。

4

1 に答える 1