Reenable password based encryption test
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 3 Oct 2012 14:46:33 +0000 (14:46 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 3 Oct 2012 14:46:33 +0000 (14:46 +0000)
git-svn-id: https://svn.argeo.org/commons/trunk@5583 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

base/runtime/org.argeo.util/src/test/java/org/argeo/util/crypto/PasswordBasedEncryptionTest.java

index c5600884ffd7c2431677d2465e7f9a7e02c09151..a424445394a9398369d365be33b4a95ffab0b31b 100644 (file)
@@ -18,7 +18,6 @@ package org.argeo.util.crypto;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
-import java.security.AlgorithmParameters;
 
 import javax.crypto.Cipher;
 import javax.crypto.CipherInputStream;
@@ -29,108 +28,111 @@ import javax.crypto.spec.IvParameterSpec;
 import javax.crypto.spec.PBEKeySpec;
 import javax.crypto.spec.PBEParameterSpec;
 import javax.crypto.spec.SecretKeySpec;
+import javax.xml.bind.DatatypeConverter;
 
 import junit.framework.TestCase;
 
 import org.argeo.StreamUtils;
-import org.argeo.util.crypto.PasswordBasedEncryption;
-
-public class PasswordBasedEncryptionTest{// extends TestCase {
-//     public void testEncryptDecrypt() {
-//             final String password = "test long password since they are more powerful";
-//             PasswordBasedEncryption pbeEnc = new PasswordBasedEncryption(
-//                             password.toCharArray());
-//             String message = "Hello World!";
-//             byte[] encrypted = pbeEnc.encryptString(message);
-//             // System.out.println("Encrypted: '" + new String(encrypted) + "'");
-//             PasswordBasedEncryption pbeDec = new PasswordBasedEncryption(
-//                             password.toCharArray());
-//             InputStream in = null;
-//             in = new ByteArrayInputStream(encrypted);
-//             String decrypted = pbeDec.decryptAsString(in);
-//             // System.out.println("Decrypted: '" + decrypted + "'");
-//             StreamUtils.closeQuietly(in);
-//             assertEquals(message, decrypted);
-//     }
-//
-//     public void testPBEWithMD5AndDES() throws Exception {
-//             String password = "test";
-//             String message = "Hello World!";
-//
-//             byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
-//                             (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
-//
-//             int count = 1024;
-//
-//             String cipherAlgorithm = "PBEWithMD5AndDES";
-//             String secretKeyAlgorithm = "PBEWithMD5AndDES";
-//             SecretKeyFactory keyFac = SecretKeyFactory
-//                             .getInstance(secretKeyAlgorithm);
-//             PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
-//             PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, count);
-//             SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
-//             Cipher ecipher = Cipher.getInstance(cipherAlgorithm);
-//             ecipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
-//             Cipher dcipher = Cipher.getInstance(cipherAlgorithm);
-//             dcipher.init(Cipher.DECRYPT_MODE, pbeKey, pbeParamSpec);
-//
-//             byte[] encrypted = ecipher.doFinal(message.getBytes());
-//             byte[] decrypted = dcipher.doFinal(encrypted);
-//             assertEquals(message, new String(decrypted));
-//
-//     }
-//
-//     public void testPBEWithSHA1AndAES() throws Exception {
-//             String password = "test";
-//             String message = "Hello World!";
-//
-//             byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
-//                             (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
-//             byte[] iv = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
-//                             (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99,
-//                             (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
-//                             (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
-//
-//             int count = 1024;
-//             // int keyLength = 256;
-//             int keyLength = 128;
-//
-//             String cipherAlgorithm = "AES/CBC/PKCS5Padding";
-//             String secretKeyAlgorithm = "PBKDF2WithHmacSHA1";
-//             SecretKeyFactory keyFac = SecretKeyFactory
-//                             .getInstance(secretKeyAlgorithm);
-//             PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt,
-//                             count, keyLength);
-//             SecretKey tmp = keyFac.generateSecret(pbeKeySpec);
-//             SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
-//             Cipher ecipher = Cipher.getInstance(cipherAlgorithm);
-//             ecipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(iv));
-//
-//             // decrypt
-//             keyFac = SecretKeyFactory.getInstance(secretKeyAlgorithm);
-//             pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, count,
-//                             keyLength);
-//             tmp = keyFac.generateSecret(pbeKeySpec);
-//             secret = new SecretKeySpec(tmp.getEncoded(), "AES");
-//             // AlgorithmParameters params = ecipher.getParameters();
-//             // byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
-//             Cipher dcipher = Cipher.getInstance(cipherAlgorithm);
-//             dcipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
-//
-//             byte[] encrypted = ecipher.doFinal(message.getBytes());
-//             byte[] decrypted = dcipher.doFinal(encrypted);
-//             assertEquals(message, new String(decrypted));
-//
-//             ByteArrayOutputStream out = new ByteArrayOutputStream();
-//             CipherOutputStream cipherOut = new CipherOutputStream(out, ecipher);
-//             cipherOut.write(message.getBytes());
-//             StreamUtils.closeQuietly(cipherOut);
-//             byte[] enc = out.toByteArray();
-//
-//             ByteArrayInputStream in = new ByteArrayInputStream(enc);
-//             CipherInputStream cipherIn = new CipherInputStream(in, dcipher);
-//             ByteArrayOutputStream dec = new ByteArrayOutputStream();
-//             StreamUtils.copy(cipherIn, dec);
-//             assertEquals(message, new String(dec.toByteArray()));
-//     }
+
+public class PasswordBasedEncryptionTest extends TestCase {
+       public void testEncryptDecrypt() {
+               final String password = "test long password since they are safer";
+               PasswordBasedEncryption pbeEnc = new PasswordBasedEncryption(
+                               password.toCharArray());
+               String message = "Hello World!";
+               System.out.println("Password:\t'" + password + "'");
+               System.out.println("Message:\t'" + message + "'");
+               byte[] encrypted = pbeEnc.encryptString(message);
+               System.out.println("Encrypted:\t'"
+                               + DatatypeConverter.printBase64Binary(encrypted) + "'");
+               PasswordBasedEncryption pbeDec = new PasswordBasedEncryption(
+                               password.toCharArray());
+               InputStream in = null;
+               in = new ByteArrayInputStream(encrypted);
+               String decrypted = pbeDec.decryptAsString(in);
+               System.out.println("Decrypted:\t'" + decrypted + "'");
+               StreamUtils.closeQuietly(in);
+               assertEquals(message, decrypted);
+       }
+
+       public void testPBEWithMD5AndDES() throws Exception {
+               String password = "test";
+               String message = "Hello World!";
+
+               byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
+                               (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
+
+               int count = 1024;
+
+               String cipherAlgorithm = "PBEWithMD5AndDES";
+               String secretKeyAlgorithm = "PBEWithMD5AndDES";
+               SecretKeyFactory keyFac = SecretKeyFactory
+                               .getInstance(secretKeyAlgorithm);
+               PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray());
+               PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, count);
+               SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
+               Cipher ecipher = Cipher.getInstance(cipherAlgorithm);
+               ecipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
+               Cipher dcipher = Cipher.getInstance(cipherAlgorithm);
+               dcipher.init(Cipher.DECRYPT_MODE, pbeKey, pbeParamSpec);
+
+               byte[] encrypted = ecipher.doFinal(message.getBytes());
+               byte[] decrypted = dcipher.doFinal(encrypted);
+               assertEquals(message, new String(decrypted));
+
+       }
+
+       public void testPBEWithSHA1AndAES() throws Exception {
+               String password = "test";
+               String message = "Hello World!";
+
+               byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
+                               (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
+               byte[] iv = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
+                               (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99,
+                               (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
+                               (byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };
+
+               int count = 1024;
+               // int keyLength = 256;
+               int keyLength = 128;
+
+               String cipherAlgorithm = "AES/CBC/PKCS5Padding";
+               String secretKeyAlgorithm = "PBKDF2WithHmacSHA1";
+               SecretKeyFactory keyFac = SecretKeyFactory
+                               .getInstance(secretKeyAlgorithm);
+               PBEKeySpec pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt,
+                               count, keyLength);
+               SecretKey tmp = keyFac.generateSecret(pbeKeySpec);
+               SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
+               Cipher ecipher = Cipher.getInstance(cipherAlgorithm);
+               ecipher.init(Cipher.ENCRYPT_MODE, secret, new IvParameterSpec(iv));
+
+               // decrypt
+               keyFac = SecretKeyFactory.getInstance(secretKeyAlgorithm);
+               pbeKeySpec = new PBEKeySpec(password.toCharArray(), salt, count,
+                               keyLength);
+               tmp = keyFac.generateSecret(pbeKeySpec);
+               secret = new SecretKeySpec(tmp.getEncoded(), "AES");
+               // AlgorithmParameters params = ecipher.getParameters();
+               // byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
+               Cipher dcipher = Cipher.getInstance(cipherAlgorithm);
+               dcipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
+
+               byte[] encrypted = ecipher.doFinal(message.getBytes());
+               byte[] decrypted = dcipher.doFinal(encrypted);
+               assertEquals(message, new String(decrypted));
+
+               ByteArrayOutputStream out = new ByteArrayOutputStream();
+               CipherOutputStream cipherOut = new CipherOutputStream(out, ecipher);
+               cipherOut.write(message.getBytes());
+               StreamUtils.closeQuietly(cipherOut);
+               byte[] enc = out.toByteArray();
+
+               ByteArrayInputStream in = new ByteArrayInputStream(enc);
+               CipherInputStream cipherIn = new CipherInputStream(in, dcipher);
+               ByteArrayOutputStream dec = new ByteArrayOutputStream();
+               StreamUtils.copy(cipherIn, dec);
+               assertEquals(message, new String(dec.toByteArray()));
+       }
 }