公開鍵と秘密鍵を使用して、パスワードを暗号化または復号化できます。
編集:
まず、公開鍵と秘密鍵のペアを作成する必要があります。これには 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 サービスはそれを復号化し、クライアントを認証します。