博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现AES数据对称加密和解密算法!
阅读量:3960 次
发布时间:2019-05-24

本文共 3468 字,大约阅读时间需要 11 分钟。

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

在这里插入图片描述

转载地址:http://oeqzi.baihongyu.com/

你可能感兴趣的文章
nano使用
查看>>
c函数
查看>>
linux 链接
查看>>
centos6.x 添加开机启动服务
查看>>
zfs 简单使用
查看>>
linux EXT4格式分区扩容
查看>>
实现 du 命令
查看>>
git revert reset 使用
查看>>
一些比较好的golang安全项目
查看>>
HTTP状态码
查看>>
go语言
查看>>
mysql mariaDB 以及存储引擎
查看>>
游戏行业了解介绍
查看>>
linux at 命令使用
查看>>
Go在windows下执行命令行指令
查看>>
inotify
查看>>
inode
查看>>
Shell: sh,bash,csh,tcsh等shell的区别
查看>>
golang ubuntu 配置 笔记
查看>>
vim 常用命令
查看>>