mysql aes密钥大于16位_AES加密解密代码(key是16位)--java

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

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

public classAES16 {//加密

public staticString Encrypt(String sSrc, String sKey) throws Exception {if (sKey == null) {

System.out.print("Key为空null");return null;

}//判断Key是否为16位

if (sKey.length() != 16) {

System.out.print("Key长度不是16位");return null;

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

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

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

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。

}//解密

public staticString Decrypt(String sSrc, String sKey) throws Exception {try{//判断Key是否正确

if (sKey == null) {

System.out.print("Key为空null");return null;

}//判断Key是否为16位

if (sKey.length() != 16) {

System.out.print("Key长度不是16位");return null;

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

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

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

cipher.init(Cipher.DECRYPT_MODE, skeySpec);byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密

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

String originalString= new String(original,"utf-8");returnoriginalString;

}catch(Exception e) {

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

}

}catch(Exception ex) {

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

}

}/**

*

* @Description AES解密,加密内容转化为16位二进制后解密mxg20190906

* @return String

* @author mxg*/

public staticString aesDecrypt(String sSrc, String sKey) throws Exception {try{//判断Key是否正确

if (sKey == null) {

System.out.print("Key为空null");return null;

}//判断Key是否为16位

if (sKey.length() != 16) {

System.out.print("Key长度不是16位");return null;

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

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

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

cipher.init(Cipher.DECRYPT_MODE, skeySpec);//byte[] encrypted1 = new Base64().decode(sSrc);//先用base64解密

try{byte[] original =cipher.doFinal( parseHexStr2Byte(sSrc));

String originalString= new String(original,"utf-8");returnoriginalString;

}catch(Exception e) {

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

}

}catch(Exception ex) {

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

}

}/**将16进制转换为二进制

* @param hexStr

* @return*/

public static byte[] parseHexStr2Byte(String hexStr) {if (hexStr.length() < 1)return null;byte[] result = new byte[hexStr.length()/2];for (int i = 0;i< hexStr.length()/2; i++) {int high = Integer.parseInt(hexStr.substring(i*2, i*2+1), 16);int low = Integer.parseInt(hexStr.substring(i*2+1, i*2+2), 16);

result[i]= (byte) (high * 16 +low);

}returnresult;

}public static voidmain(String[] args) throws Exception {/** 此处使用AES-128-ECB加密模式,key需要为16位。*/     //盐

String cKey = "";

// 需要加密的字串

String cSrc = "cicroot";

System.out.println("原文显示的字串:"+cSrc);

// 加密

String enString = AES16.Encrypt(cSrc, cKey);

System.out.println("加密后的字串是:" + enString);

// 解密

String DeString = AES16.Decrypt(enString, cKey);

System.out.println("解密后的字串是:" + DeString);}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值