AES加解密算法,使用Base64做转码以及辅助加密:

package com.wintv.common;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

/*******************************************************************************

* AES加解密算法

*

* @author arix04

*

*/

public class AES {

// 加密

public static String 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();

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

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

IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());//使用CBC模式,需要一个向量iv,可增加加密算法的强度

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

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

return new BASE64Encoder().encode(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。

}

// 解密

public static String 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("ASCII");

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

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

IvParameterSpec iv = new IvParameterSpec("0102030405060708"

.getBytes());

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

byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);//先用base64解密

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 void main(String[] args) throws Exception {

/*

* 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定

* 此处使用AES-128-CBC加密模式,key需要为16位。

*/

String cKey = "1234567890123456";

// 需要加密的字串

String cSrc = "Email : arix04@xxx.com";

System.out.println(cSrc);

// 加密

long lStart = System.currentTimeMillis();

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

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

long lUseTime = System.currentTimeMillis() - lStart;

System.out.println("加密耗时:" + lUseTime + "毫秒");

// 解密

lStart = System.currentTimeMillis();

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

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

lUseTime = System.currentTimeMillis() - lStart;

System.out.println("解密耗时:" + lUseTime + "毫秒");

}

}

AES加解密算法,使用byte2hex做转码:

package com.wintv.common;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

/*******************************************************************************

* AES加解密算法

*

* @author arix04

*

*/

public class AES {

// 加密

public static String 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();

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

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

IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());

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

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

return byte2hex(encrypted).toLowerCase();

}

// 解密

public static String 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("ASCII");

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

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

IvParameterSpec iv = new IvParameterSpec("0102030405060708"

.getBytes());

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

byte[] encrypted1 = hex2byte(sSrc);

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 byte[] hex2byte(String strhex) {

if (strhex == null) {

return null;

}

int l = strhex.length();

if (l % 2 == 1) {

return null;

}

byte[] b = new byte[l / 2];

for (int i = 0; i != l / 2; i++) {

b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2),

16);

}

return b;

}

public static String byte2hex(byte[] b) {

String hs = "";

String stmp = "";

for (int n = 0; n < b.length; n++) {

stmp = (java.lang.Integer.toHexString(b[n] & 0XFF));

if (stmp.length() == 1) {

hs = hs + "0" + stmp;

} else {

hs = hs + stmp;

}

}

return hs.toUpperCase();

}

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

/*

* 加密用的Key 可以用26个字母和数字组成,最好不要用保留字符,虽然不会错,至于怎么裁决,个人看情况而定

*/

String cKey = "1234567890123456";

// 需要加密的字串

String cSrc = "Email : arix04@xxx.com";

System.out.println(cSrc);

// 加密

long lStart = System.currentTimeMillis();

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

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

long lUseTime = System.currentTimeMillis() - lStart;

System.out.println("加密耗时:" + lUseTime + "毫秒");

// 解密

lStart = System.currentTimeMillis();

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

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

lUseTime = System.currentTimeMillis() - lStart;

System.out.println("解密耗时:" + lUseTime + "毫秒");

}

}

java aes加密 base64_【java】AES加密解密|及Base64的使用相关推荐

  1. java byte to base64_如何把byte转换成base64的byte

    展开全部 由于该e5a48de588b662616964757a686964616f31333363363463问题没有标明是java或者是android的,以下我的解决方法: android:byt ...

  2. javascript 解密_Javascript中的AES加密和Java中的解密

    javascript 解密 AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本,例如密码,然后将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加 ...

  3. Javascript中的AES加密和Java中的解密

    AES代表高级加密系统,它是一种对称加密算法,很多时候我们需要在客户端加密一些纯文本(例如密码)并将其发送到服务器,然后由服务器解密以进行进一步处理.AES加密和解密更加容易在相同的平台(例如Andr ...

  4. java aes 中文_java实现AES加密(解决中文解密后乱码问题,解决传输字符串后解密报错的问题)...

    在对安全性要求比较高的报文做加密的时候,算法有很多种,我这里主要用到的就是AES加密算法.由于在国内使用,所以不可避免的要对中文进行加密和解密,而在这个过程中,发现,如果不做处理,很容易会出现中文乱码 ...

  5. JAVA与PHP之间进行aes加密解密

    aes加密解密过程 用户数据应经过加密再传输,此文档为aes128加密(cbc模式)的说明 摘要算法为SHA-512 加密: 生成16位iv向量,使用该iv以及密钥加密原文 将加密后的真实密文与iv拼 ...

  6. java AES加密 前端CryptoJS AES解密

    问题 java加密生成base64位字符串,前端使用Java提供的密钥,前端无法解密出数据. java后台加密使用AES/ECB/PKCS5Padding 数据准备: 一个固定秘钥,互相约定 B7E1 ...

  7. 前后台数据传输问题----AES加密,前台JS加密,后台JAVA解密。

    一.JS中加密(解密)数据,采用的是谷歌的CryptoJS静态件 链接: https://pan.baidu.com/s/1l5pHY4g45zzL85dDs8M82Q (如果CSDN无法直接跳转,建 ...

  8. JS前端加密和Java后端的AES加密和解密

    先上前端代码 import cryptoJs from 'crypto-js' let keyOne = 'ZHyXgjF7BejeJySh5vX4O6qE'export default {//加密e ...

  9. 1、【java数据安全】数据安全之加密解密(base64、MD、SHA、DES、AES、IDEA、PBE、DH、RSA、EIGamal)、数字签名(DSA、ECDSA)和数字证书介绍、应用示例详细介绍

    java数据安全 系列文章 1.[java数据安全]数据安全之加密解密(base64.MD.SHA.DES.AES.IDEA.PBE.DH.RSA.EIGamal).数字签名(DSA.ECDSA)和数 ...

最新文章

  1. python怎么变成动图_python简单的图片切换形成动画效果程序
  2. 科学家打造全套人工神经系统 帮助瘫痪病人重新控制身体
  3. beyond compare 4 的30天试用期已过-解决方法
  4. 【堆叠抓取+深度学习】基于深度学习+PPO深度强化学习的堆叠物体抓取算法的MATLAB仿真
  5. java redirect 跨域_碰到了跨域问题, Redirect is not allowed for a preflight request
  6. SSDT Hook的妙用-对抗ring0 inline hook
  7. 8086 INC, DEC
  8. 比拼浮点运算速度,超算排行榜是这样“算”出来的
  9. 人与人之间需要最基本的信任
  10. python代码段_python代码段有哪些
  11. 掌握c语言的运行环境,c语言考试大纲
  12. 世界著名汽车标志(大全)
  13. 定位到excel最后一个非空单元格操作技巧,你一定要知道!(二)
  14. python实现LU分解与LUP分解
  15. Excel中查找字符串的相关问题---重点推荐
  16. 访谈:腾讯高级交互设计师C7210的十年设计路(上)
  17. 经济师人力资源方向备考信息
  18. Android HIDL HAL 接口定义语言详解
  19. html字体自动放大,让用户自己控制网页字体的大小的css书写方法
  20. 从0开始搭建自己的个人网站教程(二)虚拟主机的选购指南

热门文章

  1. 角色转移至其他账号不能转服务器,《CF手游》账号数据转移要求说明 跨系统角色转移卡什么数据不可转移...
  2. macbook移动文件
  3. 联想韦卫:商用云计算从用户需求开始
  4. 分享35款超酷的免费英文涂鸦字体
  5. python中值滤波
  6. Django计算机毕业设计爱宝贝影楼管理系统(程序+LW)Python
  7. 如何利用Matlab制作色卡,手把手教你做一张属于自己的色卡,彩铅必备!
  8. 管家婆财贸双全使用说明(五)数据备份和恢复
  9. libreoffice calc 插入多行
  10. 网络管理 - SNMP 简单网络管理协议