Java AES加密算法

本文介绍了使用Java实现的AES加密和解密功能,包括使用`javax.crypto`包中的`Cipher`类配合`SecretKeySpec`和`Base64`进行16位密钥的加密与解密操作,以ECB/PKCS5Padding模式为例。
摘要由CSDN通过智能技术生成


import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;

/**
 * 
 * AES加解密
 * @author : 
 * @date :  
 * @version : key为16位
 */
public class AESUtil {

    /**
     * 
     * @Description:加密
     * @param content
     * @param key
     * @return: 返回结果描述
     * @return String: 返回值类型
     * @throws
     */
    public static String encrypt(String content, String key) {
        try {

            byte[] raw = key.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");// "算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(content.getBytes("utf-8"));
            //BASE64转码
            String other = org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(encrypted);
            return other;
        } catch (Exception e) {
            return "";
        }
    }

    /**
    * 
    * @Description:解密
    * @param content
    * @param key为16位
    * @return: 返回结果描述
    * @return String: 返回值类型
    * @throws
    */
    public static String decrypt(String content, String key) {
        try {
            byte[] raw = key.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            //base64转码
            byte[] encrypted1 = new Base64().decode(content);
            try {
                byte[] original = cipher.doFinal(encrypted1);
                String originalString = new String(original, "utf-8");
                return originalString;
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

}
 

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中可以通过javax.crypto包实现AES加密算法,具体实现步骤如下: 1. 获取Cipher对象 ```java Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); ``` 其中,AES表示使用AES算法,CBC表示使用CBC模式,PKCS5Padding表示使用PKCS#5填充方式。 2. 初始化Cipher对象 ```java SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); ``` 其中,keyBytes表示AES加密密钥的字节数组,ivBytes表示初始化向量的字节数组,ENCRYPT_MODE表示加密模式。 3. 执行加密操作 ```java byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8")); ``` 其中,plainText表示需要加密的明文字符串。 完整的加密代码如下: ```java import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Base64; public class AesUtil { public static String encrypt(String plainText, String key, String iv) throws Exception { byte[] keyBytes = key.getBytes("UTF-8"); byte[] ivBytes = iv.getBytes("UTF-8"); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes); cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivSpec); byte[] encryptedBytes = cipher.doFinal(plainText.getBytes("UTF-8")); return Base64.getEncoder().encodeToString(encryptedBytes); } public static void main(String[] args) throws Exception { String plainText = "Hello, world!"; String key = "1234567890123456"; String iv = "1234567890123456"; String encryptedText = encrypt(plainText, key, iv); System.out.println("encryptedText: " + encryptedText); } } ``` 其中,key和iv都是16字节(128位)的字符串。由于AES算法的安全性非常高,因此在使用时需要注意密钥和向量的安全性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值