Java中的AES加解密

直接上代码,Base64使用的是Java8的方法,如没有,替换即可

KEY:即密码

IV:即偏移量,可自订,十六位

加密方式:AES/CBC/PKCS5Padding,128位加密

如果想用256位和PKCS7Padding需要额外导入包

import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

/**
 * 加解密工具
 *
 * @author hackyo
 * Created on 2017/12/13 18:33.
 */
public final class Encrypt {

    private static final String CBC_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
    private static final String KEY = "aaaaaaaa";
    private static final String IV = "abcdefghijklm123";
    private static SecretKey secretKey;

    static {
        try {
            KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
            keyGenerator.init(128, new SecureRandom(KEY.getBytes()));
            secretKey = new SecretKeySpec(keyGenerator.generateKey().getEncoded(), "AES");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        String original = "加密我";
        String encodedText = aesEncode(original);
        System.out.println("密文(Base64加密后的密文)" + encodedText);
        System.out.println("原文(解密后)" + aesDecode(encodedText));
    }

    /**
     * AES加密
     *
     * @param original 原文
     * @return 密文
     */
    public static String aesEncode(String original) {
        try {
            Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM);
            cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes()));
            return Base64.getEncoder().encodeToString(cipher.doFinal(original.getBytes()));
        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * AES解密
     *
     * @param ciphertext 密文
     * @return 原文
     */
    public static String aesDecode(String ciphertext) {
        try {
            Cipher cipher = Cipher.getInstance(CBC_CIPHER_ALGORITHM);
            cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(IV.getBytes()));
            return new String(cipher.doFinal(Base64.getDecoder().decode(ciphertext)));
        } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }

}
时间: 2024-10-14 16:50:01

Java中的AES加解密的相关文章

C#与java中的AES加解密互解算法

一.C#版AES加解密算法 public class AESCode { public string Key { get; set; } public string Encrypt(string val) { if (string.IsNullOrEmpty(val)) return null; #if CSP using (AesCryptoServiceProvider des = new AesCryptoServiceProvider()) #else using (AesManaged

React中的AES加解密请求

引言 在我们使用React开发Web前端的时候,如果是比较大的项目和正常的项目的话,我们必然会用到加解密,之前的文章中提到.NET的一些加解密,那么,这里我就模拟一个例子: 1.后台开发API接口,但API接口需要加密请求,或者需要解密输出参数 2.前端使用React开发web调用API接口 让我们开始吧 那么针对于上述问题,我们可以使用"crypto-js"组件,具体使用方式可以去GitHub上搜索相应的组件,本文例子使用使用AES的方法进行加解密,结束上述需求 当我们引用组件后,那

JAVA中使用AES加密解密

技术交流群: 233513714 /** * AES加密测试 * * @param str 加密参数 */ public void aesTest(String str) { log.info("[rsaTest获取请求:{}]", str); try { String encryptResult = AESUtil.encrypt(str, "123456"); log.info("[AES加密后的参数为:{}]", encryptResult

Java、C#双语版配套AES加解密示例

这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解密使用base64转码方法,ECB模式,PKCS5Padding填充,密码必须是16位,否则会报错哈 模式:Java的ECB对应C#的System.Security.Cryptography.CipherMode.ECB 填充方法:Java的PKCS5Padding对应C#System.Security

aes加解密 Illegal key size

做aes加密时,发生一个奇怪的错误,在本地环境是好的,发布到测试环境就出问题, java.security.InvalidKeyException: Illegal key size 想到本地环境之前也是遇到加密问题,从oracle官网下载了两个文件,覆盖本地文件得到解决. 推测测试环境肯定也是此原因,照此方法,测试环境aes加解密问题得到解决,特此记录下来,避免下次再踩坑. 问题背景: Java几乎各种常用加密算法都能找到对应的实现.因为美国的出口限制,Sun通过权限文件(local_poli

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

aes加解密前后端-后台

一.web.xml: <filter> <filter-name>fastLoginFilter</filter-name> <filter-class>com.shencai.xf.common.util.FastLoginFilter</filter-class> </filter> <filter-mapping> <filter-name>fastLoginFilter</filter-name&

AES加解密算法Qt实现

[声明] (1) 本文源码 在一位未署名网友源码基础上,利用Qt编程,实现了AES加解密算法,并添加了文件加解密功能.在此表示感谢!该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 除图1外,图片及部分解析来自http://zh.wikipedia.org/wiki/%E9%AB%98%E7%BA%A7%E5%8A%A0%E5%AF%86%E6%A0%87%E5%87%86.图1为个人劳动成果,请勿盗用此图. [简介] AES(Advanced Encryption Standard,

Java中的加密与解密

Java中的加密与解密主要对数据的安全性提供保障,分为对称和非对称的,对称表示加密密钥和解密密钥是同一个密钥,因此也常常称作私密密钥或秘密密钥,非对称密钥表示加密密钥和解密为两个不同的密钥,一个为公共密钥,另一个则为私密密钥.对称加密解密算法有DES.AES等,非对称加密解密算法有RSA.DH等.对于数据的加密与解密我们通常通过生成密钥,然后通过加密与解密操作类利用密钥对数据进行加密与解密,接下来我们看看Java中如何实现对称.非对称加密与解密. 对称加密与解密:通过KeyGenerator(密