package com.hdu.encode;

import javax.crypto.Cipher;

import javax.crypto.spec.IvParameterSpec;

import javax.crypto.spec.SecretKeySpec;

import sun.misc.BASE64Decoder;

import sun.misc.BASE64Encoder;

/**

* AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,在进行Base64编码转化;

*/

public class AESOperator {

/*

* 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位。

*/

// a0b891c2d563e4f7

private String sKey = "abcdef0123456789";

private String ivParameter = "0123456789abcdef";

private static AESOperator instance = null;

private AESOperator() {

}

public static AESOperator getInstance() {

if (instance == null)

instance = new AESOperator();

return instance;

}

// 加密

public String encrypt(String sSrc){

String result = "";

try {

Cipher cipher;

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

byte[] raw = sKey.getBytes();

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

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

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

byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));

result = new BASE64Encoder().encode(encrypted);

} catch (Exception e) {

e.printStackTrace();

}

// 此处使用BASE64做转码。

return result;

}

// 解密

public String decrypt(String sSrc){

try {

byte[] raw = sKey.getBytes("ASCII");

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

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

IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());

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

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

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

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

return originalString;

} catch (Exception ex) {

ex.printStackTrace();

return null;

}

}

public static void main(String[] args){

// 需要加密的字串

String cSrc = "测试";

System.out.println(cSrc + " 长度为" + cSrc.length());

// 加密

long lStart = System.currentTimeMillis();

String enString = AESOperator.getInstance().encrypt(cSrc);

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

long lUseTime = System.currentTimeMillis() - lStart;

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

// 解密

lStart = System.currentTimeMillis();

String DeString = AESOperator.getInstance().decrypt(enString);

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

lUseTime = System.currentTimeMillis() - lStart;

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

}

}

java 可逆的加密算法_java实现AES可逆加密算法相关推荐

  1. java aes对称加密算法_Java实现AES对称加密算法

    Java代码实现 import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGener ...

  2. java md5加密长度_java中使用MD5加密算法进行加密

    java中使用MD5加密算法进行加密以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在各种应用系统的开发中 经常需要存储 ...

  3. java的rsa加密_java实现的RSA加密算法详解

    本文实例讲述了java实现的RSA加密算法.分享给大家供大家参考,具体如下: 一.什么是非对称加密 1.加密的密钥与加密的密钥不相同,这样的加密算法称之为非对称加密 2.密钥分为:公钥,私钥 公钥:可 ...

  4. java的密文发送_Java密文加密方式(一)AES

    高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的).对称加密算法也就是加密和解密用相同的密钥,具体的加密流 ...

  5. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  6. Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES RSA

    [最简单的加密] 1.简单的概念 明文:加密前的信息 密文:机密后的信息 算法:加密或解密的算法 密钥:算法使用的钥匙(读作miyao,正确应该是miyue,但是大家都读miyao) 2.简单的例子 ...

  7. Java 加密 AES 对称加密算法

    版权声明:本文为博主原创文章,未经博主允许不得转载. [AES] 一种对称加密算法,DES的取代者. 加密相关文章见:Java 加密解密 对称加密算法 非对称加密算法 MD5 BASE64 AES R ...

  8. JS 与 JAVA 跨语言实现 RSA 和 AES加密算法

    简介: 开发中为了数据的安全性使用加密算法对数据进行加密是一种很常见的情况,但就一种语言来说,直接使用提供的相应的库进行少许封装是一件很容易的事.但是在一些情况下我们可能需要跨语言来实现,比如前后端分 ...

  9. Java实现密码学工具,集成了对称加密算法DES,AES,IDEA,公开加密算法RSA,ECC,散列算法MD5,SHA1,CRC32,以及RSA,DSA,ECDSA数字签名验证示例。

    密码学综合工具 前言 git网址 项目结构 项目预览 String与byte[]互转 通过`String`类转换 通过`Base64`互转[jdk-8] 前言 我们网络信息安全的实验...要我们找各种 ...

最新文章

  1. DirectX10 学习笔记2:在多文档框架中初始化DirectX 10
  2. Flask-uploads 简单使用
  3. python面试总结 博客园_python面试题总结
  4. python进行两个大数相加
  5. gson 转换 ListMap 注意事项
  6. 分块编码(Transfer-Encoding:chunked)
  7. python网页填表教程_PythonSpot 中文系列教程 · 翻译完成
  8. php ci上传图片,CodeIgniter上传图片成功的全部过程分享
  9. window下tomcat 按天生成日志_Tomcat原理(一)
  10. 《人月神话》读后感1
  11. Docker笔记1 基础概念和镜像
  12. Vue3 组合式Api之customRef实现防抖功能
  13. apache 的 配置项
  14. 利用matlab将位图转为SVG矢量图
  15. 微信公众号支付开发-php
  16. 荣耀电视鸿蒙安装第三方软件,荣耀电视如何安装第三方应用?当贝市场几招搞定!...
  17. C语言数据结构-队列
  18. 《掌控习惯》读书笔记
  19. 历届图灵奖 (Turing award)得奖名单
  20. J2EE中相对路径和绝对路径

热门文章

  1. pytorch 图像分割的交并比_「通知」《深度学习之图像识别》再版工作启动,欢迎指导和提建议...
  2. 不同格式的json解析
  3. webservie报文格式
  4. Linux Shell脚本专栏_批量创建100用户并设置密码脚本_03
  5. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库 总览
  6. Java并行流 No thread-bound request found
  7. docker Gitlab14.5.0 安装、配置、部署、使用
  8. Vue3 --- 安装和使用echarts
  9. Java-Arrays类
  10. c语言中循环结构的作用,C语言中对于循环结构优化的一些入门级方法简介