Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size

使用加密算法报错异常:java.security.InvalidKeyException: Illegal key size

作者头像
鲲志说
发布于 2025-04-07 13:09:53
发布于 2025-04-07 13:09:53
19600
代码可运行
举报
运行总次数:0
代码可运行

之前文章有提到过(常用对称加密算法之AES算法-CBC模式),因为需求的需要,使用到了对称加密算法AES算法,开发完毕并测试通过了,但是后来有同事反馈,当他的项目使用到加密这一步的时候就会报错。

报错信息

java.security.InvalidKeyException: Illegal key size

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 加密
public static String encrypt(String password) throws Exception {

    Cipher cipher = Cipher.getInstance(INSTANCE);
    SecretKeySpec keySpec = new SecretKeySpec(BYTES_KEY, AES);
    // CBC模式需要生成一个16 bytes的initialization vector
    SecureRandom sr = SecureRandom.getInstanceStrong();
    byte[] iv = sr.generateSeed(16);
    IvParameterSpec ivps = new IvParameterSpec(iv);
    
    cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivps);//运行到这一行时就报上面的异常
    
    byte[] data = cipher.doFinal(password.getBytes(StandardCharsets.UTF_8));
    // IV不需要保密,把IV和密文一起返回
    return DatatypeConverter.printBase64Binary(join(iv, data));
}

奇怪的是只有这个同事的有问题

查找原因

通过谷歌发现根本原因JDK版本的不同

直接原因

如果密钥大于128, 会抛出java.security.InvalidKeyException: Illegal key size 异常. 因为密钥长度是受限制的, java运行时环境读到的是受限的policy文件. 文件位于${java_home}/jre/lib/security, 这种限制是因为美国对软件出口的控制,不同的jdk版本又有不同的长度限制

解决

这里建议直接更换JDK,现在较为普遍使用的jdk8版本,事实也证明,jdk8没有遇到这种长度限制

这里给大家提供下jdk8下载版本

MAC版 链接: https://pan.baidu.com/s/1649IuAnx79pmvsTaGIJJAA 提取码: uv38

Linux 链接: https://pan.baidu.com/s/1IsWdCbv0h0htFpm0M-Gf0Q 提取码: 2f4w

Windows 链接: https://pan.baidu.com/s/1slN99jqwS0afoJhldoBDYg 提取码: wmbk

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python中的数据结构
对于习惯使用于C++的大佬来说, 容器的使用极大的方便了编程的需要,尤其对于参加算法竞赛的同学们,不必再自己去写类函数(当然了,类函数已经明明白白的)。作为python的使用者,开发者也为大家提供了已经打包好的函数库,import 即可。
AngelNH
2020/04/15
7320
python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
给[‘x’,‘y’]这个tuple命名为point,这个tuple中,第一个空位命名为'x',第二个为'y'。
悟乙己
2019/05/26
1.9K0
Python 工匠:容器的门道
容器”这两个字很少被 Python 技术文章提起。一看到“容器”,大家想到的多是那头蓝色小鲸鱼:Docker,但这篇文章和它没有任何关系。本文里的容器,是 Python 中的一个抽象概念,是对专门用来装其他对象的数据类型的统称。
腾讯蓝鲸助手
2022/06/28
5890
python 安装spark_Spark环境搭建 (Python)
—————————————————————————————————— 2018-5-11更新
学到老
2019/02/14
1.1K0
MongoDB Spark Connector 实战指南
1、高性能,官方号称 100x faster,因为可以全内存运行,性能提升肯定是很明显的;
MongoDB中文社区
2019/10/23
1.4K0
MongoDB Spark Connector 实战指南
流畅的 Python 第二版(GPT 重译)(七)
面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义”(第八章)中所讨论的。
ApacheCN_飞龙
2024/03/21
3040
流畅的 Python 第二版(GPT 重译)(七)
使用Elasticsearch、Spark构建推荐系统 #1:概述及环境构建
推荐系统是机器学习当前最著名、最广泛使用,且已经证明价值的落地案例。尽管有许多资源可用作训练推荐模型的基础,但解释如何实际部署这些模型来创建大型推荐系统的资源仍然相对较少。
flavorfan
2022/03/18
3.5K0
使用Elasticsearch、Spark构建推荐系统 #1:概述及环境构建
【错误记录】Python 中使用 PySpark 数据计算报错 ( SparkException: Python worker failed to connect back. )
os.environ['PYSPARK_PYTHON'] 的值设置为 你自己电脑上的 python.exe 绝对路径即可 , 不要按照我电脑上的 Python 解释器路径设置 ;
韩曙亮
2023/10/11
2K0
【错误记录】Python 中使用 PySpark 数据计算报错 ( SparkException: Python worker failed to connect back. )
Jupyter在美团民宿的应用实践
做算法的同学对于Kaggle应该都不陌生,除了举办算法挑战赛以外,它还提供了一个学习、练习数据分析和算法开发的平台。Kaggle提供了Kaggle Kernels,方便用户进行数据分析以及经验分享。在Kaggle Kernels中,你可以Fork别人分享的结果进行复现或者进一步分析,也可以新建一个Kernel进行数据分析和算法开发。Kaggle Kernels还提供了一个配置好的环境,以及比赛的数据集,帮你从配置本地环境中解放出来。Kaggle Kernels提供给你的是一个运行在浏览器中的Jupyter,你可以在上面进行交互式的执行代码、探索数据、训练模型等等。更多关于Kaggle Kernels的使用方法可以参考 Introduction to Kaggle Kernels,这里不再多做阐述。
美团技术团队
2019/12/04
2.6K0
写py2、py3兼容的代码
写py2、py3兼容的代码 用到一段时间python,之前也重点复习了一次python3。但工作中运行环境是python2.7,于是要求写出py2、py3都兼容的代码。下面将涉及到的几点技巧列举出来以备忘。 print函数 py3中print语句没有了,取而代之的是print()函数。 Python 2.6与Python 2.7部分地支持这种形式的print语法。因此保险起见,新写的代码都使用print函数。 from __future__ import print_function print("fish
jeremyxu
2018/05/10
2.5K0
第二章、深入类和对象
2.1.鸭子类型和多态 “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”  我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。 实例一: # 鸭子类型和多态简单实例 class Dog(object): def say(self): print('a dog') class Cat(object): def say(self): print('a cat') class Duck(object):
zhang_derek
2018/05/30
9360
Python基础(九) | time random collections itertools标准库详解
(2)time.perf_counter()   随意选取一个时间点,记录现在时间到该时间点的间隔秒数,记录sleep
timerring
2022/10/06
6640
Python基础(九) | time random collections itertools标准库详解
Python3.x和Python2.x的区别
http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html
bear_fish
2018/09/20
9340
CentOS8.0下安装PaddlePaddle后ImportError: cannot import name 'collections_abc'
用腾讯云轻量服务器带的系统镜像CentOS8.0系统安装paddlepaddle 直接 $ pip install paddlepaddle 然后在Python解释器里面输入 import paddle 然后就会有错误: ImportError: cannot import name 'collections_abc' 或者其他等等,原因可能是轮子的版本太旧了,需要更新一下。 简单粗暴的卸载再装上( $ pip uninstall six $ pip install six $ pip uninstall
bywjge
2021/06/11
2.9K0
Python 工匠:容器的门道
https://www.zlovezl.cn/articles/mastering-container-types/
用户2196567
2019/03/04
7850
Python 容器使用的 5 个技巧和 2 个误区
在 Python 中,有四类最常见的内建容器类型: 列表(list)、 元组(tuple)、 字典(dict)、 集合(set)。通过单独或是组合使用它们,可以高效的完成很多事情。
一墨编程学习
2019/07/14
8290
Python2和Python的区别那个版
想学习Python的人都会有一个困惑,那就是Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?
py3study
2020/01/09
8430
解决ImportError: cannot import name 'pywrap_tensorflow'
在使用 TensorFlow 进行开发和训练深度学习模型时,有时候可能会遇到 ​​ImportError: cannot import name 'pywrap_tensorflow'​​ 这个错误。这个错误通常是由于 TensorFlow 版本不兼容或没有正确安装所引起的。本文将介绍如何解决这个错误。
大盘鸡拌面
2023/10/20
7760
Caffe2 - (三十三) Detectron 之 roi_data - data loader
Caffe2 - (三十三) Detectron 之 roi_data - data loader 1. loader.py Detectron data loader.py 是通用设计,与 minibatch 的实现细节无关. 多线程的数据加载. minibatch 是字典形式,存储了 blob name keys 和对应的 numpy (float32 或 int32) ndarray values. 设计结构: loader thread\ loader thread \
AIHGF
2018/05/17
1.1K0
Python工匠:解析容器类型的门道
花下猫语:年关已近,我本周忙得天昏地暗,忙中出了不少错,喵了个去。无论如何,希望大伙是买票顺顺利利的,回家安安全全的,过年是开开心心的。今天,给大家分享的是一篇很长的好文,祝大家阅读愉快。PS:本文是该系列的第四篇,其它文章也很好,文末附了链接,可关联阅读哦~
Python猫
2019/04/09
8340
推荐阅读
相关推荐
python中的数据结构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验