aes cbc java实现_Java实现AES-128-CBC算法加解密

AES加解密工具类

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.util.ArrayList;

import java.util.Collections;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

/**

* AES加密128位CBC模式工具类

*/

public class AESUtils {

//解密密钥(自行随机生成)

public static final String KEY = "qxhzngy266a186ke";//密钥key

public static final String IV = "1ci5crnda6ojzgtr";//向量iv

//认证密钥(自行随机生成)

public static final String AK = "s2ip9g3y3bjr5zz7ws6kjgx3ysr82zzw";//AccessKey

public static final String SK = "uv8zr0uen7aim8m7umcuooqzdv8cbvtf";//SecretKey

//加密

public static String Encrypt(String content) throws Exception {

byte[] raw = KEY.getBytes("utf-8");

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//"算法/模式/补码方式"

//使用CBC模式,需要一个向量iv,可增加加密算法的强度

IvParameterSpec ips = new IvParameterSpec(IV.getBytes());

cipher.init(Cipher.ENCRYPT_MODE, skeySpec, ips);

byte[] encrypted = cipher.doFinal(content.getBytes());

return new BASE64Encoder().encode(encrypted);

}

//解密

public static String Decrypt(String content) throws Exception {

try {

byte[] raw = KEY.getBytes("utf-8");

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

IvParameterSpec ips = new IvParameterSpec(IV.getBytes());

cipher.init(Cipher.DECRYPT_MODE, skeySpec, ips);

byte[] encrypted1 = new BASE64Decoder().decodeBuffer(content);

try {

byte[] original = cipher.doFinal(encrypted1);

String originalString = new String(original);

return originalString;

} catch (Exception e) {

System.out.println(e.toString());

return null;

}

} catch (Exception ex) {

System.out.println(ex.toString());

return null;

}

}

//获取认证签名(身份认证需要)

public static String getSign(String currentTime) throws Exception {

String sign = "";

Mapmap=new HashMap();

map.put("ak",AK);

map.put("sk",SK);

map.put("ts",currentTime);

//获取 参数字典排序后字符串

String decrypt = getOrderMap(map);

try {

//指定sha1算法

MessageDigest digest = MessageDigest.getInstance("SHA-1");

digest.update(decrypt.getBytes());

//获取字节数组

byte messageDigest[] = digest.digest();

// Create Hex String

StringBuffer hexString = new StringBuffer();

// 字节数组转换为十六进制数

for (int i = 0; i < messageDigest.length; i++) {

String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);

if (shaHex.length() < 2) {

hexString.append(0);

}

hexString.append(shaHex);

}

sign = hexString.toString();

} catch (NoSuchAlgorithmException e) {

e.printStackTrace();

}

return sign;

}

//获取参数的字典排序

private static String getOrderMap(Mapmaps){

ListparamNames = new ArrayList();

for(Map.Entryentry : maps.entrySet()){

paramNames.add(entry.getValue().toString());

}

Collections.sort(paramNames);

StringBuilder paramStr = new StringBuilder();

for(String paramName : paramNames){

paramStr.append(paramName);

}

return paramStr.toString();

}

}

测试结果

public class AES128CBC {

public static void main(String[] args) throws Exception {

String content = "需要加密的内容";

//加密

String ens = AESUtils.Encrypt(content);

System.out.println("加密后:" + ens);

//解密

String des = AESUtils.Decrypt(ens);

System.out.println("解密后:" + des);

}

}

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

FieryTiger

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值