AES加解密算法,代码如下:

/**
* Created by hua on 2017/6/30.
*/ import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec; public class AESUtil1 {
//初始化向量,aes 16位
private static final String IV = "abcdefghijk1mnop"; //二进制转变为16进制
public static String parseByte2HexStr(byte[] buf) {
StringBuffer sb = new StringBuffer();
for (int i = ; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == ) {
hex = '' + hex;
}
sb.append(hex);
}
return sb.toString();
} //将16进制转变为二进制
public static byte[] parseHexStr2Byte(String hexStr) {
if (hexStr.length() < ) {
return null;
}
byte[] result = new byte[hexStr.length() / ];
for (int i = ; i < hexStr.length() / ; i++) {
int high = Integer.parseInt(hexStr.substring(i * , i * + ), );
int low = Integer.parseInt(hexStr.substring(i * + , i * + ), );
result[i] = (byte) (high * + low);
}
return result;
} //加密
public static String encrypt(String content, String keyWord) throws Exception {
try {
SecretKeySpec key = new SecretKeySpec(keyWord.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV.getBytes()));
byte[] encryptedData = cipher.doFinal(content.getBytes("UTF-8"));
return parseByte2HexStr(encryptedData);
} catch (Exception e) {
throw new Exception("加密失败");
}
} //解密
public static String decrypt(String content, String keyWord) throws Exception {
byte[] contentBytes = parseHexStr2Byte(content);
try {
SecretKeySpec key = new SecretKeySpec(keyWord.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV.getBytes()));
byte[] result = cipher.doFinal(contentBytes);
return new String(result, "UTF-8");
} catch (Exception e) {
throw new Exception("解密失败");
}
} public static void main(String[] args) throws Exception { String content = "梅须逊雪三分白,雪却输梅一段香。";
String password = "0123456789abcdef"; //此处使用AES-128-CBC加密模式,key需要为16位 System.out.println("加密前:" + content);
String encryptResult = AESUtil1.encrypt(content, password);
System.out.println("加密后:" + encryptResult);
String decryptResult = AESUtil1.decrypt(encryptResult,password);
System.out.println("解密后:" + decryptResult);
}
}

运行输出如下:

加密前:梅须逊雪三分白,雪却输梅一段香。
加密后:a5856355ef87955f0f112970495502ebe61b9bce4998bc777c9b383d608c1ba2da97f377914354d2e0d6500d1dac786aa69e593a67a17030389624223c5ee8fd
解密后:梅须逊雪三分白,雪却输梅一段香。

JAVA AES文件加解密的更多相关文章

  1. L脚本语言实现文件加解密

    L脚本语言中能够对内存对象进行AES加解密.我们能够非常easy地实现文件加解密 #scp #定义一个秘钥字符串 定义:字符串,str1,abcdefg 打开:文件,file1,c:\1.txt 打开 ...

  2. node.js 实现 AES CTR 加解密

    node.js 实现 AES CTR 加解密 node aesctr 前言 由于最近我们在做一款安全的文件分享 App, 所有文件均需要使用 aes ctr 来进行加密,aes key 还有一整套完整 ...

  3. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  4. java安全与加解密

    1 安全 安全性相关内容分为认证.授权和审计(发现安全问题时可以查看相关历史记录) 用户认证 java API表示主体的是javax.security.auth.Subject类型,表示用户身份标识的 ...

  5. java AES加密、解密(兼容windows和linux)

      java AES加密.解密 CreationTime--2018年7月14日10点06分 Author:Marydon 1.准备工作 updateTime--2018年8月10日15点28分 up ...

  6. 【转】 Java 进行 RSA 加解密时不得不考虑到的那些事儿

    [转] Java 进行 RSA 加解密时不得不考虑到的那些事儿 1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时 ...

  7. java C# objective-c AES对称加解密

    /** * AES加解密 */ public class AESHelper { final static String AES_KEY = "43hr8fhu34b58123"; ...

  8. 最新版-Python和Java实现Aes相互加解密

    前情 需要使用Python和Java实现同一个AES加解密算法,使Python版本加密的密文能够由Java代码解密,反之亦然. Python实现 Python为3.6版本 # -*- coding: ...

  9. java基础/数据加解密(Mooc)

    一.消息摘要算法 常用摘要算法: 以下 (HEX)内容:bc指Bouncy Castle  |  cc指:Apache commons Codec 1.消息摘要算法MD5及MD族(MD2,MD4) 消 ...

随机推荐

  1. LINQ查询表达式---------where子句

    LINQ查询表达式---------where子句 where 子句用在查询表达式中,用于指定将在查询表达式中返回数据源中的哪些元素. 它将一个布尔条件(“谓词”)应用于每个源元素(由范围变量引用), ...

  2. 零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I

    原文:零元学Expression Blend 4 - Chapter 15 用实例了解互动控制项「Button」I 本章将教大家如何更改Button的预设Template,以及如何在Button内设置 ...

  3. eclipse 插件编写(三)

    参考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_ ...

  4. MFC中的模态对话框与非模态对话框,模态对话框测试

    http://blog.csdn.net/u010839382/article/details/52972427 http://blog.csdn.net/u010839382/article/det ...

  5. 发现 TSplitter 在嵌套时不好用, 索性写了个替代品(处理MouseDown,MouseMove,MouseUp,然后设定控件的Left值就可以了)

    代替 TSplitter 的 TDirPanel 类: unit DirPanel; interface uses   Classes, Controls, Forms, ExtCtrls; type ...

  6. 腾讯云直播录制遇到的bug

    1.录制方式应用:   初始化方法   [[TXUGCRecordshareInstance] startCameraCustom:param preview:_showPlayerView]; ID ...

  7. 在Mac OSX下使用ssh建立隧道(在Windows下建立隧道可以使用putty,其间会用到ppk文件)

    在Windows下建立隧道可以使用putty,其间会用到ppk文件.在Mac OSX下,同样的功能可以用ssh命令实现.具体是: ssh -D 8088 -Nf user@ip -i myppk.ss ...

  8. 浅析C#代理

    delegate 是委托声明的基础,是.net 的委托的声明的关键字action 是基于delegate实现的代理 有多个参数(无限制个数)无返回值的代理 func 是基于delegate实现的代理 ...

  9. 使用Func<T1, T2, TResult> 委托返回匿名对象

    Func<T1, T2, TResult> 委托 封装一个具有两个参数并返回 TResult 参数指定的类型值的方法. 语法 public delegate TResult Func< ...

  10. Spring中如何获取request的方法汇总及其线程安全性分析

    前言 本文将介绍在Spring MVC开发的web系统中,获取request对象的几种方法,并讨论其线程安全性.下面话不多说了,来一起看看详细的介绍吧. 概述 在使用Spring MVC开发Web系统 ...