您的位置 首页 java

java-常用加解密算法-对称加密

这节整理 对称加密 基本介绍、使用场景及特点,以及 Java (AES)实现机制(文末附代码,需要的自取哈)

三、对称加密

定义:

加密和解密时使用 同一把密钥 得加密方式,也称密钥加密

常用算法:推荐AES加密

1、 DES (Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;

2、3DES( Triple DES ):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高;

3、AES(Advanced Encryption Standard): 高级加密标准 ,是下一代的加密算法标准,速度快,安全级别高,支持128、192、256位密钥的加密;

4、Blowfish

特征:

1、加密方和解密方使用同一个密钥;

2、加密解密的速度比较快,适合数据比较长时的使用;

3、密钥传输的过程不安全,且容易被破解,密钥管理也比较麻烦;

Java实现方式(使用AES)

 package com.joy.demo.util;


import org. apache .commons.codec.binary.Base64;


import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.security.NoSuchAlgorithm Exception ;
import java.security.SecureRandom;


/**
* User: Joy
* Description:
* Date: 2022-10-31 10:13
*/public class AesUtil {


 // 生成 私钥 key
 public  static   byte [] getKeyStr() {
 try {
 KeyGenerator keyGenerator = KeyGenerator. getInstance ("AES");
 //  Secure Random生成默认长度的key
 keyGenerator.init(new SecureRandom());
 SecretKey secretKey = keyGenerator.generateKey();
 byte[] bytesKey = secretKey.getEncoded();
 System.out.println("key 是 :" + bytesKey.to string ());
 return bytesKey;
 } catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
 }
 return null;
 }


 /**
 * 加密
 *
 * @param contentStr
 * @param bytesKey
 * @return
 */ public static byte[] jdkAesEncrypt(String contentStr, byte[] bytesKey) {
 try {
 // KEY转换


 // 如果key作为string参数传递 需用以下格式编码转换!!!
// String string = new String(bytesKey," ISO-8859-1 ");
// byte[] result1 =  String .getBytes("ISO-8859-1");


 Key key = new SecretKeySpec(bytesKey, "AES");
 // 加密
 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");


 // 加密执行
 cipher.init(Cipher.ENCRYPT_MODE, key);
 byte[] result = cipher.doFinal(contentStr.getBytes("utf-8"));
 System.out.println("加密后 jdkAesEncrypt:" + Base64.encodeBase64String(result));
 return result;
 } catch (Exception e) {
 e.printStackTrace();
 }
 return null;
 }


 /**
 * 解密
 *
 * @param encryptBytes
 * @param bytesKey
 * @return
 */ public static String jdkAesDecrypt(byte[] encryptBytes, byte[] bytesKey) {
 String outputStr = "";
 try {
 // KEY转换
 Key key = new SecretKeySpec(bytesKey, "AES");
 // 解密
 Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");


 // 解密执行
 cipher.init(Cipher.DECRYPT_MODE, key);
 byte[] decryptBytes = cipher.doFinal(encryptBytes);
 outputStr = new String(decryptBytes);
 System.out.println("解密后明文是 :" + outputStr);
 } catch (Exception e) {
 e.printStackTrace();
 }
 return outputStr;
 }


 public static  void  main(String[] args) {
 String content = "明文是123";
 System.out.println("明文是:" + content);
 byte[] key = getKeyStr();
 jdkAesDecrypt(jdkAesEncrypt(content, key), key);
 }


}  

文章来源:智云一二三科技

文章标题:java-常用加解密算法-对称加密

文章地址:https://www.zhihuclub.com/184717.shtml

关于作者: 智云科技

热门文章

网站地图