欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现AES数据对称加密和解密算法!

程序员文章站 2024-03-14 19:41:29
...

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

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

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,运行展示

Java实现AES数据对称加密和解密算法!

相关标签: Java

上一篇: 打印1~100之间的质数

下一篇: