In Some
applications, at User registration time, we need to Encrypt the
password field and then store into the database.
After that if same
user logs in, retrieve the encrypted password from Database , decrypt
it and then compare it with user entered password.
If both password's
are equal, then only the User will be allowed to login the
application.
This java code
snippet can be used to Encrypt and decrypt the passwords with
PBEWithMD5AndDES algorithm in java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | import javax.crypto.*; import javax.crypto.spec.*; import java.security.spec.*; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.io.*; public class Helper { public static Cipher dcipher,ecipher; //Responsible for setting, initializing this object's encrypter and decrypter Chipher instances Helper(String passPhrase) { // 8-bytes Salt byte [] salt = { ( byte ) 0xA9 , ( byte ) 0x9B , ( byte ) 0xC8 , ( byte ) 0x32 , ( byte ) 0x56 , ( byte ) 0x34 , ( byte ) 0xE3 , ( byte ) 0x03 }; // Iteration count int iterationCount = 19 ; try { //Generate a temporary key. In practice, you would save this key //Encrypting with DES Using a Pass Phrase KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount); SecretKey key = SecretKeyFactory.getInstance( "PBEWithMD5AndDES" ).generateSecret(keySpec); ecipher = Cipher.getInstance(key.getAlgorithm()); dcipher = Cipher.getInstance(key.getAlgorithm()); // Prepare the parameters to the cipthers AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount); ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec); } catch (InvalidAlgorithmParameterException e) { System.out.println( "EXCEPTION: InvalidAlgorithmParameterException" ); } catch (InvalidKeySpecException e) { System.out.println( "EXCEPTION: InvalidKeySpecException" ); } catch (NoSuchPaddingException e) { System.out.println( "EXCEPTION: NoSuchPaddingException" ); } catch (NoSuchAlgorithmException e) { System.out.println( "EXCEPTION: NoSuchAlgorithmException" ); } catch (InvalidKeyException e) { System.out.println( "EXCEPTION: InvalidKeyException" ); } } //Encrpt Password @SuppressWarnings ( "unused" ) protected String encrypt(String str) { try { // Encode the string into bytes using utf-8 byte [] utf8 = str.getBytes( "UTF8" ); // Encrypt byte [] enc = ecipher.doFinal(utf8); // Encode bytes to base64 to get a string return new sun.misc.BASE64Encoder().encode(enc); } catch (BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } return null ; } // Decrpt password //To decrypt the encryted password protected String decrypt(String str) { Cipher dcipher = null ; try { byte [] salt = {( byte ) 0xA9 , ( byte ) 0x9B , ( byte ) 0xC8 , ( byte ) 0x32 ,( byte ) 0x56 , ( byte ) 0x34 , ( byte ) 0xE3 , ( byte ) 0x03 }; int iterationCount = 19 ; try { String passPhrase= "" ; KeySpec keySpec = new PBEKeySpec(passPhrase.toCharArray(), salt, iterationCount); SecretKey key = SecretKeyFactory.getInstance( "PBEWithMD5AndDES" ).generateSecret(keySpec); dcipher = Cipher.getInstance(key.getAlgorithm()); // Prepare the parameters to the cipthers AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount); dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec); } catch (InvalidAlgorithmParameterException e) { System.out.println( "EXCEPTION: InvalidAlgorithmParameterException" ); } catch (InvalidKeySpecException e) { System.out.println( "EXCEPTION: InvalidKeySpecException" ); } catch (NoSuchPaddingException e) { System.out.println( "EXCEPTION: NoSuchPaddingException" ); } catch (NoSuchAlgorithmException e) { System.out.println( "EXCEPTION: NoSuchAlgorithmException" ); } catch (InvalidKeyException e) { System.out.println( "EXCEPTION: InvalidKeyException" ); } // Decode base64 to get bytes byte [] dec = new sun.misc.BASE64Decoder().decodeBuffer(str); // Decrypt byte [] utf8 = dcipher.doFinal(dec); // Decode using utf-8 return new String(utf8, "UTF8" ); } catch (BadPaddingException e) { } catch (IllegalBlockSizeException e) { } catch (UnsupportedEncodingException e) { } catch (IOException e){ } return null ; } /** * @param args */ public static void main(String[] args) { try { // Create encrypter/decrypter class System.out.println( "Inside Helper" ); Helper encrypter = new Helper( "" ); // Pass the word to be Encrypted to Encrypt() System.out.println( "encrypt the String: SimplePassword" ); String encrypted = encrypter.encrypt( "SimplePassword" ); System.out.println( "encrypted String:" + encrypted); // Pass the encrypted word to be Decrypted to Decrypt() String decrypted = encrypter.decrypt(encrypted); System.out.println( "decrypted String:" + decrypted); } catch (Exception e) { } } } /* ************** OUTPUT ********************** encrypt the String: SimplePassword encrypted String:7X57aBz+EzblJoIon5HkCg== decrypted String:SimplePassword *************************************************/ |
thanks