| | |
Java Encryption and Decryption
Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
![]() |
•
•
Join Date: Aug 2006
Posts: 3
Reputation:
Solved Threads: 0
Hi folks, i need some help on how to get this code to work properly:
I have not had the time to fully commit to its intrinsics but i am sure there is someone
in the community who can get me some quick help.
Thanx.
I have not had the time to fully commit to its intrinsics but i am sure there is someone
in the community who can get me some quick help.
Thanx.
Java Syntax (Toggle Plain Text)
package javaapplication1; import java.io.ByteArrayOutputStream; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; /** * @author dkawalya */ public class DataEncryptor { protected DataEncryptor(){} protected SecretKeySpec initialize() throws Exception { byte[] mySecretKey = { (byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb, (byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb,(byte)0xbb, (byte)0xbb,(byte)0xdd,(byte)0xdd,(byte)0xcc }; SecretKeySpec myKeySpec = new SecretKeySpec(mySecretKey, "AES"); return myKeySpec; } protected byte[] encryptedDataBytes(String c) throws Exception{ if(c == null) return null; try{ SecretKeySpec keySpec = initialize(); if (keySpec == null) return null; Cipher myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); myCipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] dataBytes = c.getBytes(); byte[] encryptedData = myCipher.doFinal(dataBytes); return encryptedData; }catch(Exception e){ e.printStackTrace(); return null; } //The rest of the throwables are not caught and it is up to the calling //routine to catch them } protected String decryptDataBytes(byte[] encryptedBytes) throws Exception{ if (encryptedBytes == null) return null; try{ SecretKeySpec keySpec = initialize();//initialize is a method declared above and returns the SecretKeySpec if (keySpec == null) return null; //Get an instance of the cipher Cipher myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); myCipher.init(Cipher.ENCRYPT_MODE,keySpec); myCipher.init(Cipher.DECRYPT_MODE, keySpec,myCipher.getParameters()); byte[] decryptedData = myCipher.doFinal(encryptedBytes); return new String(decryptedData); }catch(Exception e){ e.printStackTrace(); return null; } } //The above two methods are byte based whereas the ones below are string based protected String encryptData(String c) throws Exception{ if(c == null) return null; try{ SecretKeySpec keySpec = initialize(); if (keySpec == null) return null; Cipher myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); myCipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] dataBytes = c.getBytes(); byte[] encryptedData = myCipher.doFinal(dataBytes); return new String((encryptedData)); }catch(Exception e){ e.printStackTrace(); return null; } //The rest of the throwables are not caught and it is up to the calling //routine to catch them } protected String decryptData(String c) throws Exception{ if (c == null) return null; try{ SecretKeySpec keySpec = initialize(); if (keySpec == null) return null; //Get an instance of the cipher Cipher myCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); myCipher.init(Cipher.ENCRYPT_MODE,keySpec); myCipher.init(Cipher.DECRYPT_MODE, keySpec,myCipher.getParameters()); /*Try to implement the padding, described in http://www.faqs.org/rfcs/rfc2315.html, at line 63 which is 2. Some content-encryption algorithms assume the input length is a multiple of k octets, where k > 1, and let the application define a method for handling inputs whose lengths are not a multiple of k octets. For such algorithms, the method shall be to pad the input at the trailing end with k - (l mod k) octets all having value k - (l mod k), where l is the length of the input. In other words, the input is padded at the trailing end with one of the following strings: 01 -- if l mod k = k-1 02 02 -- if l mod k = k-2 > . k k ... k k -- if l mod k = 0 The padding can be removed unambiguously since all input is padded and no padding string is a suffix of another. This padding method is well-defined if and only if k < 256; methods for larger k are an open issue for further study.*/ //Pad up the bytes as according to the convention above ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); byteArray.write(c.getBytes()); for(int i = ((c.length() == 16) ? 16 : (16 - c.length() % 16)); i>0; i--){ byteArray.write((byte)(16 -(c.length() % 16))); } byte[] bytesToDecrypt = byteArray.toByteArray(); //This should be the padded up array of //bytes byte[] decryptedData = myCipher.doFinal(bytesToDecrypt);// i get this error on this line: javax.crypto.IllegalBlockSizeException: //Input length must be multiple of 16 when decrypting with //padded cipher return new String(decryptedData); }catch(Exception e){ e.printStackTrace(); return null; } } public static void main(String[] args){ try{ DataEncryptor davis = new DataEncryptor(); //Lets use the byte based routines first byte[] encryptedBytes = davis.encryptedDataBytes("My brains seem to be in normal mode"); System.out.println(new String(encryptedBytes)); //print the string of encrypted bytes String decrypt = davis.decryptDataBytes(encryptedBytes);//decrypt the data bytes returned by //the above routine System.out.println(decrypt);// print the decrypted bytes as a string, but this is what i get(the //string is decrypted half way): #H�F��=���#]�Do be in normal mode //Now lets use the string based routines String encryptedString = davis.encryptData("My brains seem to be in normal mode");//encrypt //this string System.out.println(encryptedString);//print the encrypted string String decryptedString = davis.decryptData(encryptedString);//decrypt the above string System.out.println(decryptedString);//print out the decrypted string and get this error: }catch(Exception e){ System.out.println(e.getMessage()); e.printStackTrace(); } } }
![]() |
Similar Threads
- Data Encryption and Decryption (C#)
- Java Encryption and Decryption (Java)
- How to encryption/decryption algorithm for mdb table? (Visual Basic 4 / 5 / 6)
- ENCRYPTION AND DECRYPTION - How to disable the File menu in a Notepad or any file (VB.NET)
Other Threads in the Java Forum
- Previous Thread: instantiating array objects
- Next Thread: Client and server with objects
Views: 1048 | Replies: 0
| Thread Tools | Search this Thread |
Tag cloud for Java
3d @param affinetransform android api apple applet application arc arguments array arrays automation binary bluetooth byte c# chat class classes click client code color compare component corrupted database detection draw eclipse error event exception file fractal game givemetehcodez graphics gui guitesting helpwithhomework html ide image input integer j2me java java.xls javaprojects jmf jni jpanel julia keytool keyword linux list loop map method methods mobile netbeans newbie number object oracle pong print problem producer program programming project projectideas read recursion reflection rim scanner screen server set size sms socket sort sql string swing terminal test threads time transfer tree web windows





