本文共 3468 字,大约阅读时间需要 11 分钟。
这是一个数据加密的作业,我是自学的懂的不多,这里简单做一个笔记记录。
从加密种类上理解数据的加密方式有单向加密和双向加密,他们的区别为如下
数据加密种类 | 理解 |
---|---|
单向加密 | 从一个方向进行加密操作不进行解密(A发送数据给B,B收到加密后的数据信息) |
双向加密 | 对数据进行加密和解密(A发送数据给B,B收到进行加密传输并解密的数据信息) |
这里解释下双向加密的对称性与非对称性
对称性与非对称性 | 理解 |
---|---|
对称加密 | 加密的秘钥与解密的秘钥是一样的 |
非对称加密 | 加密的秘钥与解密的秘钥是不一样的 |
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(); } }}
转载地址:http://oeqzi.baihongyu.com/