标题:Java实现AES数据对称加密算法!

这是一个数据加密的作业,我是自学的懂的不多,这里简单做一个笔记记录。


目录

  • 标题:Java实现AES数据对称加密算法!
  • 1,数据加密简介
  • 2,AES的对称加密和解密的实现
  • 3,运行展示


1,数据加密简介

从加密种类上理解数据的加密方式有单向加密和双向加密,他们的区别为如下

数据加密种类

理解

单向加密

从一个方向进行加密操作不进行解密(A发送数据给B,B收到加密后的数据信息)

双向加密

对数据进行加密和解密(A发送数据给B,B收到进行加密传输并解密的数据信息)

这里解释下双向加密的对称性与非对称性

对称性与非对称性

理解

对称加密

加密的秘钥与解密的秘钥是一样的

非对称加密

加密的秘钥与解密的秘钥是不一样的

2,AES的对称加密和解密的实现

package Secret;

import javax.crypto.*;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Scanner;

/**
 * @author ganxiang
 * IDE      IntelliJ IDEA
 * @project_name and filename JavaDemo AES
 * @date 2020/05/09 0009 15:06
 */

public class AES {
    //1,生成秘钥
    public  static SecretKey generateKey() throws NoSuchAlgorithmException {
        //1,指定生成AES秘钥(Advanced Encryption Standard)高级加密标准,getInstance("")返回一个 KeyGenerator对象指定密钥生成算法。
        KeyGenerator keyGenerator =KeyGenerator.getInstance("AES");
        //2,构建一个安全的随机数发生器(RNG)执行默认的随机数算法
        SecureRandom secureRandom =new SecureRandom();
        //3,初始化秘钥
        keyGenerator.init(secureRandom);
        //4,生成秘钥
        SecretKey secretKey=keyGenerator.generateKey();
        return secretKey;
    }
    //2,加密算法
    public static byte [] aesAlgorithm(byte[] context,int mode,SecretKey secretKey) throws
            NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException {
        //Cipher对象用于加密和解密的加密密码的功能
        //1,getInstance()返回一个 Cipher对象实现指定的变换。
        Cipher cipher =Cipher.getInstance("AES");
        //2,初始化cipher,一个关键的初始化这个密码。
        cipher.init(mode,secretKey);
        //3,doFinal()完成多个部分的加密或解密操作,这取决于该密码是如何初始化的。
        byte[] result =cipher.doFinal(context);
        return  result;

    }
     //3,对数据加密
    public static byte[] encoding(String data, SecretKey secretKey) throws UnsupportedEncodingException,
            IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException {

        return aesAlgorithm(data.getBytes("UTF-8"),Cipher.ENCRYPT_MODE,secretKey);

    }
     //4,对数据解密
    public static String decoding (byte[] context,SecretKey secretKey) throws IllegalBlockSizeException,
            InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, UnsupportedEncodingException {
        return new String(aesAlgorithm(context,Cipher.DECRYPT_MODE,secretKey),"UTF-8");

    }
    public static void main(String[] args) {
        //1,输入字符串进行加密解密
        Scanner scanner =new Scanner(System.in);
         String data =scanner.nextLine();
        //2,指定符串进行加密解密
//        String data ="hello 欢迎";

        System.out.println("需要AES加密和解密的数据为:"+data);
        try {
            SecretKey secretKey =generateKey();
            byte[] encoding =encoding(data,secretKey);
            System.out.println("AES加密后的结果为:"+ new String(encoding,"UTF-8"));
            System.out.println("AES解密后的结果为:"+decoding(encoding,secretKey));
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

    }

}

3,运行展示

aes java 密钥生成 java实现aes加密解密_java