2012-12-11 5 views
3

Je dois crypter/décrypter le texte brut en Java en utilisant DES avec une clé. J'ai un très bon tutoriel chez IBM qui peut être trouvé here. Le problème avec cet exemple est qu'il génère la clé dans le programme lui-même. Maintenant, si je crypte une chaîne (par exemple un mot de passe) et que je la stocke dans la base de données, je ne serais pas capable de la déchiffrer car je ne connaîtrais pas la clé.Utiliser la clé privée dans Java en utilisant DES sans générer automatiquement la clé

est Ci-dessous l'exemple chez 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")); 
} 
} 

Quelqu'un peut-il suggérer comment puis-je ajouter ma propre clé dans cet exemple?

Répondre

1

Faites la clé l'un des arguments au lieu de generateKey si vous envisagez de fournir la clé.

Édition: generateKey génère une clé aléatoire. Il peut être plus simple d'enregistrer cette clé pour déchiffrer que d'ajouter du code pour analyser un argument clé. Jetez un oeil à KeyGenerator et SecretKey.

+0

merci pour la réponse rapide, mais pouvez-vous être un peu plus précis s'il vous plaît. generateKey ne prend aucun argument! – antnewbee

+0

generateKey génère une clé aléatoire. Il peut être plus simple pour vous de sauvegarder cette clé à utiliser pour le déchiffrement plutôt que d'ajouter du code pour analyser un argument clé. – jacknad

+0

Cela ne semble pas très bien car je vais utiliser cette classe dans toute l'application et chaque fois que je redémarre le serveur, la clé va changer. – antnewbee

0

Jetez un oeil à SecretKeyFactory et DESKeySpec. Ceux-ci peuvent être utilisés pour construire une clé DES à partir du matériau de la clé (un tableau d'octets).

Vous pouvez obtenir le matériau de clé à partir d'une clé DES à l'aide de getEncoded().

Questions connexes