2012-12-11 3 views
3

Java에서 DES로 키를 사용하여 일반 텍스트를 암호화/암호 해독해야합니다. 나는 IBM에서 아주 좋은 튜토리얼을 가지고 있는데 이것은 here이다. 이 예제의 문제점은 프로그램 자체에서 키를 생성한다는 것입니다. 이제 문자열 (예 : 암호)을 암호화하고 데이터베이스에 저장하면 키를 알 수 없기 때문에 암호를 해독 할 수 없습니다. 다음은 자동으로 키를 생성하지 않고 DES를 사용하여 Java에서 개인 키 사용

누군가가 내가이 예에서 내 자신의 키를 추가 할 수있는 방법을 제안 할 수 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")); 
} 
} 

의 예입니다?

답변

1

키를 제공하려는 경우 generateKey 대신 args 키 중 하나를 만드십시오.

편집 : generateKey는 임의의 키를 생성합니다. 키를 파싱하는 코드를 추가하는 것보다 해독에 사용할이 키를 저장하는 것이 더 간단 할 수 있습니다. KeyGeneratorSecretKey을 살펴보십시오.

+0

답장을 보내 주셔서 감사합니다.하지만 좀 더 구체적으로 알려주십시오. generateKey는 인수를 취하지 않습니다! – antnewbee

+0

generateKey는 임의 키를 생성합니다. 키 인수를 파싱하는 코드를 추가하는 것보다 해독에 사용할이 키를 저장하는 것이 더 간단 할 수 있습니다. – jacknad

+0

응용 프로그램 전체에서 해당 클래스를 사용하므로 키가 변경 될 서버를 다시 시작할 때마다 문제가 발생하지 않습니다. – antnewbee

0

SecretKeyFactoryDESKeySpec을 살펴보십시오. 이것들은, 열쇠 데이터 (byte 배열)로부터 DES 열쇠를 구축하기 위해서 사용할 수 있습니다.

getEncoded()을 사용하여 DES 키에서 키 자료를 가져올 수 있습니다.