All Downloads are FREE. Search and download functionalities are using the official Maven repository.

mobi.cangol.mobile.security.AESUtils Maven / Gradle / Ivy

There is a newer version: 1.2.7
Show newest version
/**
 * Copyright (c) 2013 Cangol
 * 

* Licensed under the Apache License, Version 2.0 (the "License") * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mobi.cangol.mobile.security; /** * @author Cangol */ import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.KeyGenerator; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; public class AESUtils { private static final String CHARSET = "utf-8"; private AESUtils() { } public static String encrypt(String seed, String content) throws UnsupportedEncodingException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException { final byte[] rawKey = getRawKey(seed.getBytes(CHARSET)); final byte[] result = encrypt(rawKey, content.getBytes(CHARSET)); return toHex(result); } public static String decrypt(String seed, String encrypted) throws UnsupportedEncodingException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException { final byte[] rawKey = getRawKey(seed.getBytes(CHARSET)); final byte[] enc = toByte(encrypted); final byte[] result = decrypt(rawKey, enc); return new String(result, CHARSET); } private static byte[] getRawKey(byte[] seed) throws NoSuchAlgorithmException { final KeyGenerator kgen = KeyGenerator.getInstance("AES"); final SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); sr.setSeed(seed); kgen.init(128, sr); // 192 and 256 bits may not be available return kgen.generateKey().getEncoded(); } private static byte[] encrypt(byte[] raw, byte[] clear) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { final SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); final Cipher cipher = Cipher.getInstance("AES"); //AES/CBC/PKCS5Padding cipher.init(Cipher.ENCRYPT_MODE, skeySpec); return cipher.doFinal(clear); } private static byte[] decrypt(byte[] raw, byte[] encrypted) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { final SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); final Cipher cipher = Cipher.getInstance("AES"); //AES/CBC/PKCS5Padding cipher.init(Cipher.DECRYPT_MODE, skeySpec); return cipher.doFinal(encrypted); } private static byte[] toByte(String hexString) { final int len = hexString.length() / 2; byte[] result = new byte[len]; for (int i = 0; i < len; i++) { result[i] = Integer.valueOf(hexString.substring(2 * i, 2 * i + 2), 16).byteValue(); } return result; } private static String toHex(byte[] buf) { final String hex = "0123456789ABCDEF"; if (buf == null) { return ""; } final StringBuilder result = new StringBuilder(2 * buf.length); for (int i = 0; i < buf.length; i++) { result.append(hex.charAt((buf[i] >> 4) & 0x0f)) .append(hex.charAt(buf[i] & 0x0f)); } return result.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy