AES对称加密算法

  1. 简介:

AES:高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
在这里插入图片描述
密钥:用来加密明文的密码,在对称加密算法中,加密与解密的密钥是相同的。密钥为接收方与发送方协商产生,但不可以直接在网络上传输,否则会导致密钥泄漏,通常是通过非对称加密算法加密密钥,然后再通过网络传输给对方,或者直接面对面商量密钥。密钥是绝对不可以泄漏的,否则会被攻击者还原密文,窃取机密数据。

  1. 对称加密算法:
    加密过程:
    将明文分成N个组,然后对各个组进行加密,形成各自的密文,最后把所有的分组密文 进行合并,形成最终的密文。
    优点:
    算法公开、计算量小、加密速度快、加密效率高
    缺点:
    交易双方都使用同样钥匙,安全性得不到保证
    密钥管理困难,尤其是在分布式网络中
    常用算法:
    DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish
  2. 代码实现:
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

//import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;


public class AESTest {

    /**
     * 使用AES算法进行加密
     * @param str
     * @return
     */
    public static byte[] jdkAESEncode(String str,Key key){
        try {
           
            //加密
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE,key);
            byte [] result = cipher.doFinal(str.getBytes());
            //String string = Base64.encode(result);
            return result;//string;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
    
    /**
     *使用AES对加密后的字符串进行解密
     * @param str
     * @return
     */
    public static String jdkAESDecode(byte[] bytesContent,Key key){
        try {
            //加密
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE,key);
            //byte [] bytesContent = Base64.decode(str);
            byte [] result = cipher.doFinal(bytesContent);
            return new String(result);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) throws NoSuchAlgorithmException
    {
    	 //生成key
        KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
        keyGenerator.init(128,new SecureRandom());
        //生成密钥
        SecretKey secretKey = keyGenerator.generateKey();
        byte[] bytes = secretKey.getEncoded();
        //key转换
        Key key = new SecretKeySpec(bytes ,"AES");
        byte[] str = jdkAESEncode("welcome to first AES",key);
        System.out.println(str);
        System.out.println(jdkAESDecode(str,key));
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_43217065/article/details/89365617