4

キーでDESを使用して、Javaでプレーンテキストを暗号化/復号化する必要があります。私は IBM で非常に優れたチュートリアルを入手しました。これはhereにあります。この例の問題点は、プログラム自体でキーを生成していることです。文字列(パスワードなど)を暗号化してデータベースに保存すると、キーがわからないため、復号化できなくなります。

以下はIBMでの例です

import java.security.*;
import javax.crypto.*;
//
// encrypt and decrypt using the DES private key algorithm
public class PrivateExample {

  public static void main (String[] args) throws Exception {
  //
  // check args and get plaintext
    if (args.length !=1) {
      System.err.println("Usage: java PrivateExample text");
      System.exit(1);
    }
  byte[] plainText = args[0].getBytes("UTF8");
  //
  // get a DES private key
  System.out.println( "\nStart generating DES key" );
  KeyGenerator keyGen = KeyGenerator.getInstance("DES");
  keyGen.init(56);
  Key key = keyGen.generateKey();
  System.out.println( "Finish generating DES key" );
//
// get a DES cipher object and print the provider
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
System.out.println( "\n" + cipher.getProvider().getInfo() );
//
// encrypt using the key and the plaintext
System.out.println( "\nStart encryption" );
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] cipherText = cipher.doFinal(plainText);
System.out.println( "Finish encryption: " );
System.out.println( new String(cipherText, "UTF8") );

//
// decrypt the ciphertext using the same key
System.out.println( "\nStart decryption" );
cipher.init(Cipher.DECRYPT_MODE, key);
byte[] newPlainText = cipher.doFinal(cipherText);
System.out.println( "Finish decryption: " );

System.out.println( new String(newPlainText, "UTF8") );
}
}

この例で自分のキーを追加する方法を誰か提案できますか?

4

2 に答える 2

1

とを見てSecretKeyFactoryくださいDESKeySpec。これらを使用して、キー マテリアル (バイト配列) から DES キーを作成できます。

を使用して、DES キーからキー マテリアルを取得できますgetEncoded()

于 2012-12-11T20:52:21.940 に答える
1

キーを提供する予定がある場合は、generateKey の代わりにキーを引数の 1 つにします。

編集: generateKey はランダムなキーを生成します。キー arg を解析するコードを追加するよりも、このキーを保存して復号化に使用する方が簡単な場合があります。KeyGeneratorSecretKeyを見てください。

于 2012-12-11T19:57:18.847 に答える