文档章节

AES256加密相关问题

Gtwo
 Gtwo
发布于 2015/10/20 12:28
字数 504
阅读 39
收藏 0

AES加密时抛出java.security.InvalidKeyException: Illegal key size or default parameter

    使用AES加密时,当密钥大于128时,代码会抛出java.security.InvalidKeyException: Illegal key size or default parameters

    Illegal key size or default parameters是指密钥长度是受限制的,java运行时环境读到的是受限的policy文件。文件位于${java_home}/jre/lib/security 

解决办法:

    替换${java_home}/jre/lib/security/ 下面的local_policy.jar和US_export_policy.jar

下载地址:

    jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR 

    jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html 

另外参考:http://www.cnblogs.com/freeliver54/archive/2011/10/08/2202136.html

下面展示AES加密工具类以作参考

AESUtil 类:

package com.nenglong.rrt.openapi.service.utils;
import org.apache.commons.lang3.StringUtils;
import com.nenglong.rrt.openapi.bean.system.TimedSystemSetting;
import com.nenglong.rrt.openapi.common.encrypt.EnhaceAES;
import com.nenglong.rrt.openapi.service.system.sps.SystemSettingFactory;

/**
 * 
 * @author cyh
 *
 */
public class AESUtil {
    
    private final static String AESKEY = "user.oabind.aes.key";

    public final static String encrypt(String content){
        TimedSystemSetting systemSetting = SystemSettingFactory.getInstance();
        String keyStr = systemSetting.getSettings().get(AESKEY);
        if (StringUtils.isNotEmpty(keyStr)) return EnhaceAES.encrypt(content, keyStr);
        return null;
    }
}

TimedSystemSetting类:

package com.nenglong.rrt.openapi.bean.system;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.Map;

/**
 * 包含获取时间的系统设置值Bean
 * @author cyh
 */
public class TimedSystemSetting implements Serializable{

    private static final long serialVersionUID = 6509776572707295391L;
    
    private Map<String,String> settings = new HashMap<String,String>();
    private Timestamp createTime;
    
    public TimedSystemSetting(Map<String, String> settings, Timestamp createTime) {
        super();
        this.settings = settings;
        this.createTime = createTime;
    }
    public Timestamp getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Timestamp createTime) {
        this.createTime = createTime;
    }

    public Map<String, String> getSettings() {
        return settings;
    }

    public void setSettings(Map<String, String> settings) {
        this.settings = settings;
    }
}

SystemSettingFactory类:

package com.nenglong.rrt.openapi.service.system.sps;
import java.sql.Timestamp;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.nenglong.rrt.openapi.bean.system.TimedSystemSetting;
import com.nenglong.rrt.openapi.common.SpringUtil;
import com.nenglong.rrt.openapi.dao.system.SystemSettingDao;
import com.nenglong.rrt.openapi.po.basic.SystemSetting;

/**
 * 
 * @author cyh
 *
 */
public class SystemSettingFactory {

    private static TimedSystemSetting setting;

    protected SystemSettingFactory(){}
    
    public static synchronized TimedSystemSetting getInstance(){
        if (setting == null) {
            createSettingBean();
            return setting;
        }else{
            if(setting.getCreateTime().getTime() < (System.currentTimeMillis()-60000*30)){//对设置进行30分钟缓存,超过重新加载
                createSettingBean();
                return setting;
            }else{
                return setting;
            }
        }
    }
    
    private static void createSettingBean(){
        List<SystemSetting> settings = ((SystemSettingDao)SpringUtil.getBean("systemSettingDao")).findAll();
        if (settings != null) {
            Map<String,String> settings_map = new HashMap<String,String>();
            for (SystemSetting sendSetting : settings) {
                settings_map.put(sendSetting.getCode(), sendSetting.getValue());
            }
            setting = new TimedSystemSetting(settings_map, new Timestamp(System.currentTimeMillis()));
        }
    }
}

EnhaceAES类:

package com.nenglong.rrt.openapi.common.encrypt;
import java.security.Key;
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;

/**
 * 加强版AES
 * @author cyh
 */
public class EnhaceAES {

    private static Key key;
    private static Object lock = new Object();
    
    public final static String encrypt(String content, String keyStr) {
        if (key == null) {//可使用字符串指定KEY
            synchronized (lock) {
                SecretKeySpec secretKeySpec 
                    = new SecretKeySpec(Base64.decodeBase64(keyStr), "AES");
                key = secretKeySpec;
            }
        }
        try {
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器
            byte[] byteContent = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(byteContent);
            return Base64.encodeBase64String(result);
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return null;
    }
}


© 著作权归作者所有

共有 人打赏支持
Gtwo
粉丝 1
博文 42
码字总数 35045
作品 0
中山
程序员
私信 提问
[New Feature]OSS支持设置Bucket 服务端默认加密方式

第一章:阿里云OSS Bucket默认加密方式介绍   阿里云OSS支持通过API、SDK、工具以及控制台等方式设置Bucket的默认加密方式。当Bucket设置服务端加密后,具有相应权限的用户上传文件到该Buc...

figo168hf
02/22
0
0
使用 OpenSSL 对文件进行加密和解密

我们在平时的 Linux 运维管理的时候,经常会进行各种数据备份任务。将数据导出然后打包。通常在安全性要求比较高的环境下,我们可以借助 OpenSSL 工具对打包后的数据进行加密,这样能进一步的...

羊驼君
2016/11/17
728
1
三星S换机助手备份数据解析

三星S换机助手,可以在不同三星手机之间进行数据传输,提供PC端和APP端。 APP端备份出来文件为android backup格式文件,通过aes256加密。 PC端备份出来文件为androi backup通过AES256加密,之...

李龙飞要
2016/07/06
15
1
用Tar和OpenSSL给文件和目录加密及解密秘籍

用Tar和OpenSSL给文件和目录加密及解密秘籍用Tar和OpenSSL给文件和目录加密及解密秘籍在这篇文章中,我们将了解如何使用 OpenSSL 创建和加密 tar 或 gz(gzip,另一种压缩文件)归档文件: 牢记...

linuxCool
2016/11/20
3
0
CentOS 7.4 Tengine安装配置详解(五)

十四、配置Tengine支持HTTPS 1、演示环境: 备注:Tengine和CA可以部署于同一台服务器 2、修改配置文件nginx.conf,创建基于主机名的虚拟主机: server { listen 80; server_name web.vhosts...

Marion0728
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Redis之父表示ARM服务器没戏!

ARM表示Neoverse N1平台和E1 CPU即将发布,Neoverse N1和E1采用7nm制程,并且为服务器和通信设备增加重要提升,拥有高可扩展性、高处理量以及高性能,将分别在2020年和2021年投入使用。 与C...

linuxCool
19分钟前
4
0
YARN 内存参数终极详解

YARN环境中应用程序JAR包冲突问题的分析及解决 Hadoop框架自身集成了很多第三方的JAR包库。Hadoop框架自身启动或者在运行用户的MapReduce等应用程序时,会优先查找Hadoop预置的JAR包。这样的...

stys35
25分钟前
1
0
Mybatis常用总结一

这一节的学习强烈建议实际操作 主键自增和自定义主键 实现描述:我们在写程序时,时常会遇到这样的问题:插入一条数据,但因有主键的存在,而有时候会报“违反唯一性约束”的错误,我们可以使...

大笨象会跳舞吧
25分钟前
0
0
计数二进制子串

leetcode:https://leetcode.com/problems/count-binary-substrings/ 给定一个字符串 s,计算具有相同数量0和1的非空(连续)子字符串的数量,并且这些子字符串中的所有0和所有1都是组合在一起...

woshixin
28分钟前
0
0
mysql utf8mb4字符集,存储emoji表情

字符集utf8mb4 utf8mb4兼容utf8,且比utf8能表示更多的字符。 看unicode编码区 从1 ~ 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8mb4扩充区,什么时候你需要存储那些...

我心中有猛狗
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部