0

Web サービスを使用してユーザーを検証する Java アプリケーションを開発しています。ユーザーにユーザー名とパスワードを入力してもらいます。このアプリケーション ユーザーを使用するには、有効なユーザー名とパスワードが必要です。

正しいログインがあるとアクティブになるコンテキスト メニューが 1 つあります。それ以外の場合は、無効にしたいです。

そして、私は一度だけ検証したい。そのため、他のユーザーが同じシステムからそのアプリケーションを使用する場合、パスワードを再度入力する必要はありません。

つまり、アプリケーション全体でこのパスワードを使用するには、パスワードをローカル システムに保存する必要があります。

とにかくパスワードの保存に関するヘルプはありますか?

4

1 に答える 1

0

公開鍵と秘密鍵を使用して、パスワードを暗号化または復号化できます。

編集:

まず、公開鍵と秘密鍵のペアを作成する必要があります。これには openssl ツールが必要です ( http://www.openssl.org/source/または直接 Windows http://www.openssl.org/related/binaries.html )。それをインストールし、「cmd」を開き (Windows を使用している場合)、openssl インストール パスに移動し、次の行を入力してサーバーとクライアントのキーを生成します。

openssl genrsa -out serverPrivateKey.pem 2048
openssl rsa -in serverPrivateKey.pem -pubout -outform DER -out serverPublicKey.der

openssl genrsa -out clientPrivateKey.pem 2048
openssl pkcs8 -topk8 -nocrypt -in clientPrivateKey.pem -outform der -out clientPrivateKey.der
openssl rsa -in clientPrivateKey.pem -pubout -outform PEM -out clientPublicKey.pem

これで、Web サービス Java アプリケーションで、暗号化用の公開鍵をインポートできます。

File pubKeyFile = new File("keys/serverPublicKey.der");
byte[] buffer = new byte[(int) pubKeyFile.length()];

DataInputStream in = new DataInputStream(new FileInputStream(pubKeyFile));
in.readFully(buffer);
in.close();

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPublicKey publicKey = (RSAPublicKey) keyFactory.generatePublic(new X509EncodedKeySpec(buffer));

パスワードを暗号化します。

String text = password;

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(text.getBytes());

ローカル ファイル システムに保存します。

FileOutputStream fos = new FileOutputStream("/tmp/encrypted");
fos.write(encrypted);
fos.flush();
fos.close();

復号化のもう 1 つの方法。

秘密鍵をインポートします。

File privKeyFile = new File("keys/clientPrivateKey.der");
byte[] buffer = new byte[(int) privKeyFile.length()];

DataInputStream in = new DataInputStream(new FileInputStream(privKeyFile));
in.readFully(buffer);
in.close();

KeyFactory keyFactory = KeyFactory.getInstance("RSA");
RSAPrivateKey privateKey = (RSAPrivateKey) keyFactory.generatePrivate(new PKCS8EncodedKeySpec(buffer));

暗号化されたファイルを読み取ります。

File cryptedData = new File("/tmp/encrypted");
buffer = new byte[(int) cryptedData.length()];

in = new DataInputStream(new FileInputStream(cryptedData));
in.readFully(buffer);
in.close();

そしてそれを復号化します:

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING");
cipher.init(Cipher.DECRYPT_MODE, privateKey);

byte[] decrypted = cipher.doFinal(buffer);

String data = new String(decrypted);

System.out.println(data);

Web サービスが実行されているシステムで秘密鍵を秘密にしておく必要があります。暗号化のためにクライアントに公開鍵を提供する Web サービス機能を提供できます。クライアントは、暗号化されたテキスト文字列を Web サービスに送信するだけで、Web サービスはそれを復号化し、クライアントを認証します。

于 2013-04-19T07:04:56.670 に答える