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

  1. /**
  2. * Created by hua on 2017/6/30.
  3. */
  4.  
  5. import javax.crypto.Cipher;
  6. import javax.crypto.spec.IvParameterSpec;
  7. import javax.crypto.spec.SecretKeySpec;
  8.  
  9. public class AESUtil1 {
  10. //初始化向量,aes 16位
  11. private static final String IV = "abcdefghijk1mnop";
  12.  
  13. //二进制转变为16进制
  14. public static String parseByte2HexStr(byte[] buf) {
  15. StringBuffer sb = new StringBuffer();
  16. for (int i = ; i < buf.length; i++) {
  17. String hex = Integer.toHexString(buf[i] & 0xFF);
  18. if (hex.length() == ) {
  19. hex = '' + hex;
  20. }
  21. sb.append(hex);
  22. }
  23. return sb.toString();
  24. }
  25.  
  26. //将16进制转变为二进制
  27. public static byte[] parseHexStr2Byte(String hexStr) {
  28. if (hexStr.length() < ) {
  29. return null;
  30. }
  31. byte[] result = new byte[hexStr.length() / ];
  32. for (int i = ; i < hexStr.length() / ; i++) {
  33. int high = Integer.parseInt(hexStr.substring(i * , i * + ), );
  34. int low = Integer.parseInt(hexStr.substring(i * + , i * + ), );
  35. result[i] = (byte) (high * + low);
  36. }
  37. return result;
  38. }
  39.  
  40. //加密
  41. public static String encrypt(String content, String keyWord) throws Exception {
  42. try {
  43. SecretKeySpec key = new SecretKeySpec(keyWord.getBytes(), "AES");
  44. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  45. cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(IV.getBytes()));
  46. byte[] encryptedData = cipher.doFinal(content.getBytes("UTF-8"));
  47. return parseByte2HexStr(encryptedData);
  48. } catch (Exception e) {
  49. throw new Exception("加密失败");
  50. }
  51. }
  52.  
  53. //解密
  54. public static String decrypt(String content, String keyWord) throws Exception {
  55. byte[] contentBytes = parseHexStr2Byte(content);
  56. try {
  57. SecretKeySpec key = new SecretKeySpec(keyWord.getBytes(), "AES");
  58. Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
  59. cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV.getBytes()));
  60. byte[] result = cipher.doFinal(contentBytes);
  61. return new String(result, "UTF-8");
  62. } catch (Exception e) {
  63. throw new Exception("解密失败");
  64. }
  65. }
  66.  
  67. public static void main(String[] args) throws Exception {
  68.  
  69. String content = "梅须逊雪三分白,雪却输梅一段香。";
  70. String password = "0123456789abcdef"; //此处使用AES-128-CBC加密模式,key需要为16位
  71.  
  72. System.out.println("加密前:" + content);
  73. String encryptResult = AESUtil1.encrypt(content, password);
  74. System.out.println("加密后:" + encryptResult);
  75. String decryptResult = AESUtil1.decrypt(encryptResult,password);
  76. System.out.println("解密后:" + decryptResult);
  77. }
  78. }

运行输出如下:

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

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. C# GetFiles

    var path = AppDomain.CurrentDomain.BaseDirectory + "Images\\Rooms\\"; // string[] patterns ...

  2. Win10《芒果TV - Preview》官方指定预览版 - 重要使用注意事项

    Win10<芒果TV - Preview>官方指定预览版,最新的改进和功能更新将会此版本优先体验. 重要使用注意事项: 1.因为方便过审核,默认将会员相关的操作提示简化: 2.使用中务必手 ...

  3. js判断图片是否存在

    var imageData = Array(); for(var i = 0; i < imageTemp.length; i++){ ajaxSizeRequest = $.ajax({ ty ...

  4. Office Add-in Model 为 Outlook Mail Add-in 提供的 JavaScript API 介绍

    本文所讨论的 Mailbox API是指在 Mail Add-in 中可调用的 JavaScript API.开发者可以利用这些API 实现 Add-in 和 Outlook 的交互(数据读取与写入) ...

  5. 演练:创建和使用静态库 (C++)

    我们将创建的下一个库类型是静态库 (LIB). 使用静态库是重用代码的一种绝佳方式. 您不必在自己创建的每个程序中重新实现同一例程,而只需对这些例程编写一次,然后从需要该功能的应用程序引用它们即可. ...

  6. QtScript, QML, Quick1, Quick2, Declarative 之间的关系

    QtScript是基于 ECMAScript 的脚本语言 在脚本中可以访问原有C++代码中的QObject类型及其子类的实例,连接信号和槽:也可以创建QObject类型及其子类的实例. 但是QtScr ...

  7. c#自定义业务锁

    我们有这样的使用场景,某个订单在修改信息的时候,其他人不能修改相关的信息,比如不能做支付,不能退单等等,那么我们可以根据单号进行加锁,多Monitor做了如下扩展 定义接口 //// 文件名称:ILo ...

  8. 浅析 C++ 调用 Python 模块

    浅析 C++ 调用 Python 模块 作为一种胶水语言,Python 能够很容易地调用 C . C++ 等语言,也能够通过其他语言调用 Python 的模块. Python 提供了 C++ 库,使得 ...

  9. mybatis链接数据库

    DBTools类 public class DBTools { // 加载mybatis文件 public static SqlSession getSession() { //加载配置文件 Inpu ...

  10. Python基础(七) 闭包与装饰器

    闭包的定义 闭包是嵌套在函数中的函数. 闭包必须是内层函数对外层函数的变量(非全局变量)的引用. 闭包格式: def func(): lst=[] def inner(a): lst.append(a ...