JAVA AES文件加解密

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 = 0; i < buf.length; i++) {
            String hex = Integer.toHexString(buf[i] & 0xFF);
            if (hex.length() == 1) {
                hex = ‘0‘ + hex;
            }
            sb.append(hex);
        }
        return sb.toString();
    }

    //将16进制转变为二进制
    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);
        }
        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
解密后:梅须逊雪三分白,雪却输梅一段香。
时间: 2024-10-27 01:30:28

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

Android jni aes加解密,实现文件的加解密,具体实现可以自行修改,上面的代码为简单介绍,下面的是JNI端实现文件加解密,可以修改为字符串加解密

#include "aes.h" #include "modes.h" #include "e_os2.h" #include "aes_locl.h" #include "opensslconf.h" AES_KEY aes; //aes cbc模式加解密用到的向量 unsigned char iv[AES_BLOCK_SIZE]; for (i = 0; i < AES_BLOCK_SIZE; i

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

L脚本语言中可以对内存对象进行AES加解密,我们可以很简单地实现文件加解密 #scp #定义一个秘钥字符串 定义:字符串,str1,abcdefg 打开:文件,file1,c:\1.txt 打开:文件,file2,c:\1-1.txt 定义:整数,size1,0 取大小:file1,size1 显示:size1 申请:内存,mem1,size1 读取:file1,mem1 显示:mem1 加密:mem1,str1 显示:mem1 写入:文件,file2,mem1 释放:内存,mem1 申请:内存

编写一个文件加解密程序,通过命令行完成加解密工作

package wenjianyuliu; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; //编写一个文件加解密程序,通过命令行完成加解密工作 public class FileCode { private static final int numOfEncA

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

[转] Java 进行 RSA 加解密时不得不考虑到的那些事儿 1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适 公钥加密,私钥解密.加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法破解的密文数据.否则的话,你就要考虑你的场景是否有必要用 RSA 了. 2. 可以通过修改生成密钥的长度来调整密文长度 生成密文的长度等于密钥长度.密钥长度越大,生成密文的长度也就越大,加密的速度也就越慢,而密文也就越难被破解掉.著名

CryptoGUI | 文件加解密

分类: 杂类工具    版本: 0.0.3    发布日期: 2015-03-31 根据 crypto 强加密命令行工具制作的可视化版本,可快速进行任意文件的加解密操作,提供丰富的加解密选项以适应多种不同需求:CryptoGui 在 crypto 的基础上进行了人性化定制,使用更方便. 功能简介 支持当今绝大部分对称强加密算法 可定制的密钥长度,从最低32位到最高的448位.信息安全强度由用户自由选择. 算法库基于优秀的 Cryptopp 库封装,已通过FIPS 140-2美国国家信息处理标准一

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

原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.Pattern; //import java.util.Hashtable; import javax.crypto.*; import javax.crypto.spec.*; import sun.misc.*; /** * des加密解密 */ pu

DES对称加解密、AES RijndaelManaged加解密、Base64加密解密、MD5加密等操作辅助类 EncodeHelper

/// <summary> /// 使用默认加密 /// </summary> /// <param name="strText"></param> /// <returns></returns> public static string DesEncrypt(string strText) /// <summary> /// 使用默认解密 /// </summary> /// <pa

AES算法加解密纯C语言实现

文件清单: AES算法实现:aes.c,aes.h AES算法CBC模式加解密封装:aes_util.c,aes_util.h BASE64编解码实现:base64.c,base64.h AES算法测试:aes_util_test.c aes.c: /********************************************************************* * Filename: aes.c * Author: Brad Conte (brad AT bradco

C#调用Crypto++库AES ECB加解密

本文章使用上一篇<C#调用C++类库例子>的项目代码作为Demo.本文中,C#将调用C++的Crypto++库,实现AES和ECB加解密. 一.下载Crypto 1.进入Crypto的官网下载openssl.网址是: https://www.cryptopp.com/. 2.点击“DownLoad”,选择最新的可下载的版本即可.此时我下载的是cryptopp820.zip,如下图所示的. 3.解压 cryptopp820.zip. 4.打开cryptopp820文件夹中的cryptest.sl