美文网首页加密解密
java实现AES的简单加密解密

java实现AES的简单加密解密

作者: 终结者_8d5e | 来源:发表于2018-02-05 15:54 被阅读0次

    AESUtil

    [java] view plain copy

    package com.zhuyun.aes;  

    import java.io.IOException;  

    import javax.crypto.Cipher;  

    import javax.crypto.KeyGenerator;  

    import javax.crypto.SecretKey;  

    import javax.crypto.spec.SecretKeySpec;  

    import sun.misc.BASE64Decoder;  

    import sun.misc.BASE64Encoder;  

    public class AESUtil {  

    //生成AES秘钥,然后Base64编码  

    public static String genKeyAES() throws Exception{  

    KeyGenerator keyGen = KeyGenerator.getInstance("AES");  

    keyGen.init(128);  

            SecretKey key = keyGen.generateKey();  

            String base64Str = byte2Base64(key.getEncoded());  

    return base64Str;  

        }  

    //将Base64编码后的AES秘钥转换成SecretKey对象  

    public static SecretKey loadKeyAES(String base64Key) throws Exception{  

    byte[] bytes = base642Byte(base64Key);  

    SecretKeySpec key =new SecretKeySpec(bytes, "AES");  

    return key;  

        }  

    //字节数组转Base64编码  

    public static String byte2Base64(byte[] bytes){  

    BASE64Encoder encoder =new BASE64Encoder();  

    return encoder.encode(bytes);  

        }  

    //Base64编码转字节数组  

    public static byte[] base642Byte(String base64Key) throws IOException{  

    BASE64Decoder decoder =new BASE64Decoder();  

    return decoder.decodeBuffer(base64Key);  

        }  

    //加密  

    public static byte[] encryptAES(byte[] source, SecretKey key) throws Exception{  

    Cipher cipher = Cipher.getInstance("AES");  

            cipher.init(Cipher.ENCRYPT_MODE, key);  

    return cipher.doFinal(source);  

        }  

    //解密  

    public static byte[] decryptAES(byte[] source, SecretKey key) throws Exception{  

    Cipher cipher = Cipher.getInstance("AES");  

            cipher.init(Cipher.DECRYPT_MODE, key);  

    return cipher.doFinal(source);  

        }  

    }  

    TestAES

    [java] view plain copy

    package com.zhuyun.test;  

    import javax.crypto.SecretKey;  

    import org.junit.Test;  

    import com.zhuyun.aes.AESUtil;  

    public class TestAES {  

    @Test  

    public void testAES(){  

    try {  

    //=================客户端=================  

    //hello, i am infi, good night!加密  

    String message ="hello, i am infi, good night!";  

    //生成AES秘钥,并Base64编码  

                String base64Str = AESUtil.genKeyAES();  

    System.out.println("AES秘钥Base64编码:" + base64Str);  

    //将Base64编码的字符串,转换成AES秘钥  

                SecretKey aesKey = AESUtil.loadKeyAES(base64Str);  

    //加密  

    byte[] encryptAES = AESUtil.encryptAES(message.getBytes(), aesKey);  

    //加密后的内容Base64编码  

                String byte2Base64 = AESUtil.byte2Base64(encryptAES);  

    System.out.println("加密并Base64编码的结果:" + byte2Base64);  

    //##############    网络上传输的内容有Base64编码后的秘钥 和 Base64编码加密后的内容      #################  

    //===================服务端================  

    //将Base64编码的字符串,转换成AES秘钥  

                SecretKey aesKey2 = AESUtil.loadKeyAES(base64Str);  

    //加密后的内容Base64解码  

    byte[] base642Byte = AESUtil.base642Byte(byte2Base64);  

    //解密  

    byte[] decryptAES = AESUtil.decryptAES(base642Byte, aesKey2);  

    //解密后的明文  

    System.out.println("解密后的明文: " + new String(decryptAES));  

    }catch (Exception e) {  

                e.printStackTrace();  

            }  

        }  

    }  

    测试结果为:

    [java] view plain copy

    AES秘钥Base64编码:UrlSOS8igqefseqoeJUwbg==  

    加密并Base64编码的结果:7QXSwDckiqIWz1SfpAG48++ex3Zcjv92Uhl5zppqjTQ=  

    解密后的明文: hello, i am infi, good night!  

    相关文章

      网友评论

        本文标题:java实现AES的简单加密解密

        本文链接:https://www.haomeiwen.com/subject/bmcizxtx.html