Android AES Encrypt encrypt(String seed, String clearText)

Here you can find the source of encrypt(String seed, String clearText)

Description

To encrypt a string.

License

Open Source License

Parameter

Parameter Description
seed the Key used to encrypt the data.
clearText the Original text to be encrypted.

Return

the encrypted content as a string.

Declaration

public static String encrypt(String seed, String clearText) 

Method Source Code

//package com.java2s;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class Main {
    /**/* ww  w.  j  av a2 s .  co  m*/
     * Padding HEX string.
     */
    public static final String HEX = "0123456789ABCDEF";

    /**
     * To encrypt a string.
     * @param seed the Key used to encrypt the data.
     * @param clearText the Original text to be encrypted.
     * @return the encrypted content as a string.
     */
    public static String encrypt(String seed, String clearText) {
        byte[] result = null;
        try {
            byte[] rawkey = getRawKey(seed.getBytes());
            result = encrypt(rawkey, clearText.getBytes());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        if (result == null) {
            return null;
        }

        String content = toHex(result);
        return content;
    }

    /**
     * Actual encrypt data function.
     * @param raw the Raw byte data,
     * @param clear the Original text byte data.
     * @return return the encrypted data's byte data.
     */
    private static byte[] encrypt(byte[] raw, byte[] clear)
            throws Exception {
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, new IvParameterSpec(
                new byte[cipher.getBlockSize()]));
        byte[] encrypted = cipher.doFinal(clear);
        return encrypted;
    }

    /**
     * To get a raw key.
     * @param seed the byte data of a seed.
     * @return return the seed's byte data.
     */
    private static byte[] getRawKey(byte[] seed) throws Exception {
        KeyGenerator kgen = KeyGenerator.getInstance("AES");
        //SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
        SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "Crypto");
        sr.setSeed(seed);
        kgen.init(128, sr);
        SecretKey sKey = kgen.generateKey();
        byte[] raw = sKey.getEncoded();
        return raw;
    }

    /**
     * Retrieve a string's hex format
     * @param txt the Original text,
     * @return the hex format string
     */
    public static String toHex(String txt) {
        return toHex(txt.getBytes());
    }

    /**
     * Retrieve the string format of a byte data.
     * @param buf the byte source.
     * @return the string format.
     */
    public static String toHex(byte[] buf) {
        if (buf == null)
            return "";
        StringBuffer result = new StringBuffer(2 * buf.length);
        for (int i = 0; i < buf.length; i++) {
            appendHex(result, buf[i]);
        }
        return result.toString();
    }

    /**
     * utility function to transfer the byte data.
     * @param sb the string to be appended new character.
     * @param b the byte data
     */
    private static void appendHex(StringBuffer sb, byte b) {
        sb.append(HEX.charAt((b >> 4) & 0x0f)).append(HEX.charAt(b & 0x0f));
    }
}

Related

  1. encrypt(String data)
  2. encrypt(String dataPassword, String cleartext)
  3. encrypt(String key, String src)
  4. encrypt(String key, String src)
  5. encrypt(String seed, String clearText)
  6. encrypt(String seed, String cleartext)
  7. encrypt(String src)
  8. encrypt(String src)
  9. encrypt(String text, String key)