AES的256带偏移量、128不带偏移量的加解密算法(PKCS7Padding)

简介: AES的加解密: AES 256加密支持 java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法 解决方法: 测试代码使用jdk1

AES的加解密:

AES 256加密支持

  • java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法

解决方法:

http://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters
JDK8 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
JDK7 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html
JDK6 jar包下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html
1.在 jdk安装目录中(%JAVA_HOME%\jre\lib\ext)添加 jar 包 bcprov-jdk16-1.46.jar。
2.在 jdk安装目录下( %JAVA_HOME%\jre\lib\security )修改 java.security 文件,将第74行(我的是在74行)的 
security.provider.7=com.sun.security.sasl.Provider 替换为security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider
3.替换( %JAVA_HOME%\jre\lib\security )下面的local_policy.jar和US_export_policy.jar
备注:
JDK1.8.0_151无需去官网下载 local_policy.jar US_export_policy.jar这个jar包,只需要修改Java\jdk1.8.0_151\jre\lib\security这目录下的java.security文件配置即可。
从Java 1.8.0_151和1.8.0_152开始,为JVM启用 无限制强度管辖策略 有了一种新的更简单的方法。如果不启用此功能,则不能使用AES-256。
crypto.policy=unlimited
  • 测试代码使用jdk1.8.0_131 ,详细代码如下:

AES 256位 带偏移量 加解密算法

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
 * AES加密工具类:256位 不带偏移量
 *
 * @author lilinshen
 * @date 2021/03/31
 */
public class AesUtils {

    //偏移量
    public static final String VIPARA = "f%Z4F+qtFh624970";
    //编码方式
    public static final String CODE_TYPE = "UTF-8";
    //填充类型(注:CBC)
    public static final String AES_TYPE = "AES/CBC/PKCS7Padding";
    //私钥,AES固定格式为128/192/256 bits.即:16/24/32bytes
    private static final String AES_KEY = "AG+BwcnekYZy$9f7X#b2zdB93brfFMmz";
    
    /**
     * 加密带偏移量
     */
    public static String encrypt(String cleartext) {
        try {
            IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());
            SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.ENCRYPT_MODE, key, zeroIv);
            byte[] encryptedData = cipher.doFinal(cleartext.getBytes(CODE_TYPE));
            return new BASE64Encoder().encode(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 解密带偏移量
     */
    public static String decrypt(String encrypted) {
        try {
            byte[] byteMi = new BASE64Decoder().decodeBuffer(encrypted);
            IvParameterSpec zeroIv = new IvParameterSpec(VIPARA.getBytes());
            SecretKeySpec key = new SecretKeySpec(AES_KEY.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.DECRYPT_MODE, key, zeroIv);
            byte[] decryptedData = cipher.doFinal(byteMi);
            return new String(decryptedData, CODE_TYPE);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }
    
    /**
     * 测试
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        String content = "{\"vid\":73160,\"road\":\"default1\",\"timestamp\":1585815671868,\"devicetype\":\"pc\",\"encode_sign\":\"a069831103819c3c76a23fa084747bac\"}";
        System.out.println(encryptPy(content));
        System.out.println(decryptPy(encryptPy(content)));
    }
}

AES 128位 不带偏移量 加解密算法

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
/**
 * AES加密工具类:128位 不带偏移量
 *
 * @author lilinshen
 * @date 2021/03/31
 */
public class AesUtils {
    //编码方式
    public static final String CODE_TYPE = "UTF-8";
    //填充类型(注:ECB)
    public static final String AES_TYPE = "AES/ECB/PKCS7Padding";
    //私钥,AES固定格式为128/192/256 bits.即:16/24/32bytes
    private static final String AES_KEY = "46cc793c53dc451b";

    /**
     * 加密不带偏移量
     */
    public static String encrypt(String cleartext) {
        try {
            SecretKeySpec sKey = new SecretKeySpec(AES_KEY.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.ENCRYPT_MODE, sKey);
            byte[] decrypted = cipher.doFinal(cleartext.getBytes(CODE_TYPE));
            return Base64.encodeBase64String(decrypted);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 解密不带偏移量
     */
    public static String decrypt(String content) {
        try {
            byte[] sourceBytes = Base64.decodeBase64(content);
            Cipher cipher = Cipher.getInstance(AES_TYPE);
            cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(AES_KEY.getBytes(), "AES"));
            byte[] decoded = cipher.doFinal(sourceBytes);
            return new String(decoded, CODE_TYPE);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 测试
     *
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
        String content = "{\"vid\":73160,\"road\":\"default1\",\"timestamp\":1585815671868,\"devicetype\":\"pc\",\"encode_sign\":\"a069831103819c3c76a23fa084747bac\"}";
        System.out.println(encrypt(content));
        System.out.println(decrypt(encrypt(content)));
    }
}
目录
相关文章
|
2月前
|
存储 算法 安全
【加密算法】AES对称加密算法简介
【加密算法】AES对称加密算法简介
|
2月前
|
安全 小程序 数据安全/隐私保护
aes加密算法python版本
aes加密算法python版本
39 0
|
2月前
|
算法 安全 Java
Java 实现 RSA 非对称加密算法-加解密和签名验签
Java 实现 RSA 非对称加密算法-加解密和签名验签
|
2月前
|
算法 Android开发
安卓逆向 -- 自吐算法(3DES和AES)
安卓逆向 -- 自吐算法(3DES和AES)
20 1
|
2月前
|
算法 数据安全/隐私保护
火山中文编程 -- DES算法和AES算法
火山中文编程 -- DES算法和AES算法
20 0
|
3月前
|
存储 前端开发 JavaScript
JavaScript学习 -- AES加密算法
JavaScript学习 -- AES加密算法
49 0
|
3月前
|
算法 Java 数据库连接
实现 MyBatis-Plus 中的配置加密功能(使用 AES 算法)
实现 MyBatis-Plus 中的配置加密功能(使用 AES 算法)
162 0
|
1月前
|
传感器 算法 计算机视觉
基于肤色模型和中值滤波的手部检测算法FPGA实现,包括tb测试文件和MATLAB辅助验证
该内容是关于一个基于肤色模型和中值滤波的手部检测算法的描述,包括算法的运行效果图和所使用的软件版本(matlab2022a, vivado2019.2)。算法分为肤色分割和中值滤波两步,其中肤色模型在YCbCr色彩空间定义,中值滤波用于去除噪声。提供了一段核心程序代码,用于处理图像数据并在FPGA上实现。最终,检测结果输出到"hand.txt"文件。
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真
|
1月前
|
算法
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
【MATLAB】语音信号识别与处理:移动中位数滤波算法去噪及谱相减算法呈现频谱
23 2