Package rb

Source Code of rb.Encrypter$EncrypterException

/**
* $Source:$
* $Id:$
*/
package rb;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;

/**
* Encrypts/Decrypts strings using a caller-supplied passphrase.
*
* @author <a href="mailto:chris_overseas@hotmail.com">Chris Miller</a>
* @version $Revision: 1.0$
*/
public class Encrypter {
    private char[] key;
    private PBEParameterSpec paramSpec = new PBEParameterSpec(
            new byte[]{
                    (byte) 0xc4, (byte) 0x12, (byte) 0x5e, (byte) 0x0c,
                    (byte) 0x6e, (byte) 0xff, (byte) 0xce, (byte) 0x2a
            },
            23
    );

    /**
     * Constructs an encrypter that uses the given characters as an encryption key.
     */
    public Encrypter(char[] key) {
        this.key = key;
    }

    /**
     * Returns an encrypted, base64 encoded version of the supplied string.
     */
    public String encrypt(String data) {
        try {
            PBEKeySpec keySpec = new PBEKeySpec(key);
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
            SecretKey key = factory.generateSecret(keySpec);

            Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
            cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);

            byte[] inputBytes = data.getBytes("UTF8");
            byte[] outputBytes = cipher.doFinal(inputBytes);

            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(outputBytes);
        } catch (Exception e) {
            throw new EncrypterException("Failed to encrypt string.", e);
        }
    }

    /**
     * Returns the unencrypted contents of the supplied encrypted, base64 encoded string.
     */
    public String decrypt(String encryptedData) {
        try {
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] inputBytes = decoder.decodeBuffer(encryptedData);

            PBEKeySpec keySpec = new PBEKeySpec(key);
            SecretKeyFactory factory = SecretKeyFactory.getInstance("PBEWithMD5AndDES");
            SecretKey key = factory.generateSecret(keySpec);

            Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
            cipher.init(Cipher.DECRYPT_MODE, key, paramSpec);

            byte[] outputBytes = cipher.doFinal(inputBytes);
            return new String(outputBytes, "UTF8");
        } catch (Exception e) {
            throw new EncrypterException("Failed to decrypt string.", e);
        }
    }

    public static class EncrypterException extends RuntimeException {
        public EncrypterException(String message) {
            super(message);
        }

        public EncrypterException(String message, Throwable cause) {
            super(message, cause);
        }
    }
}
TOP

Related Classes of rb.Encrypter$EncrypterException

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.