AES算法的Java实现,直接对String操作

来源:互联网 发布:中国跨境电子商务数据 编辑:程序博客网 时间:2024/05/28 09:33

问题:

    今天用Java写了一下AES算法,该算法完全对String进行操作,不需要在工具类之外对byte[]和String进行互转。大大方便了使用。


代码及注释:

AESUtil.java

package aes;import java.security.Key; import javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.codec.binary.Base64;public class AESUtil {/**     * 密钥算法     */    public static final String KEY_ALGORITHM = "AES";    /**     * 加密/解密算法  /工作模式  /填充方式     */    public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";    /**     * 转换密钥     * @param key 待密钥     * @return 转换后的密钥     * @throws Exception 抛出异常     */    private static Key toKey(byte[] key) throws Exception{        //实例化AES密钥材料        SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);        return secretKey;    }    /**     * AES解密     * @param data 待解密数据     * @param key 密钥     * @return 明文     * @throws Exception 抛出异常     */    private static byte[] decrypy(byte[] data, byte[] key) throws Exception{        //还原密钥        Key k = toKey(key);        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);        //初始化,设置解密模式        cipher.init(Cipher.DECRYPT_MODE, k);        return cipher.doFinal(data);    }    /**     * AES解密     * @param data 密文     * @param aesKey AES密钥     * @return 明文     * @throws Exception 抛出异常     */    public static String decrypt(String data, String aesKey) throws Exception{        byte[] data_byets = Base64.decodeBase64(data);        byte[] aesKey_bytes = Base64.decodeBase64(aesKey);        byte[] result = decrypy(data_byets, aesKey_bytes);        return new String(result);        //return "hahaha";    }    /**     * AES加密     * @param data 待加密数据     * @param key 密钥     * @return 密文     * @throws Exception 抛出异常     */    private static byte[] encrypy(byte[] data, byte[] key) throws Exception{        Key k = toKey(key);        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);        //初始化,设置解密模式        cipher.init(Cipher.ENCRYPT_MODE, k);        return cipher.doFinal(data);    }    /**     * AES加密     * @param data 待加密数据     * @param aesKey AES密钥     * @return 密文     * @throws Exception 抛出异常     */    public static String encrypt(String data, String aesKey) throws Exception{        byte[] data_bytes = data.getBytes();        byte[] aesKey_bytes = Base64.decodeBase64(aesKey);        byte[] result = encrypy(data_bytes, aesKey_bytes);        return Base64.encodeBase64String(result);    }    /**     * 生成AES密钥     * @return AES密钥     * @throws Exception 抛出异常     */    public static String initKey() throws Exception{        //实例化        KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);        //设置密钥长度        keyGenerator.init(256);        //生成密钥        SecretKey secretKey = keyGenerator.generateKey();        //获得密钥的二进制编码形式        return Base64.encodeBase64String(secretKey.getEncoded());    }}


AES.java

package aes;public class AES {public static void main(String[] args) throws Exception{// TODO Auto-generated method stub        String data = "中华人民共和国";        System.out.println("原文:\n" + data);        String aesKey = AESUtil.initKey();        System.out.println("AES密钥:\n" + aesKey);        String encrypyStr = AESUtil.encrypt(data, aesKey);        System.out.println("密文:\n" + encrypyStr);        String decryptStr = AESUtil.decrypt(encrypyStr, aesKey);        System.out.println("明文:\n" + decryptStr);}}


运行结果:


0 0
原创粉丝点击