java aes256 加密_如何基于Java 256位AES密码的加密?-程序员宅基地

技术标签: java aes256 加密  

小编典典

与带外接收者共享password(a char[])和salt 所byte[]选择的 SecureRandom- 8个字节,这是个好习惯,不需要保密)。然后从此信息中得出一个好的密钥:

/* Derive the key, given password and salt. */

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");

KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);

SecretKey tmp = factory.generateSecret(spec);

SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

幻数(可以在某处定义为常数)65536和256分别是密钥派生迭代计数和密钥大小。

迭代密钥派生功能需要大量的计算工作,并且可以防止攻击者快速尝试许多不同的密码。可以根据可用的计算资源来更改迭代次数。

密钥大小可以减少到128位,这仍然被认为是“强”加密,但是如果发现攻击削弱了AES,它的安全边际不会太大。

与适当的块链接模式一起使用时,相同的派生密钥可用于加密许多消息。在密码块链接(CBC)中,为每个消息生成一个随机初始化向量(IV),即使明文相同,也会产生不同的密文。CBC可能不是你可以使用的最安全的模式(请参阅下面的AEAD);还有许多其他模式具有不同的安全性属性,但是它们都使用类似的随机输入。无论如何,每个加密操作的输出都是密文和初始化向量:

/* Encrypt the message. */

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.ENCRYPT_MODE, secret);

AlgorithmParameters params = cipher.getParameters();

byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();

byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8"));

存储ciphertext和iv。解密时,SecretKey使用具有相同盐和迭代参数的密码以完全相同的方式重新生成。使用此密钥初始化密码,并使用消息存储初始化向量:

/* Decrypt the message, given derived key and initialization vector. */

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));

String plaintext = new String(cipher.doFinal(ciphertext), "UTF-8");

System.out.println(plaintext);

Java 7包括了对AEAD密码模式的 API 支持,OpenJDK和Oracle发行版中包括的“SunJCE”提供程序从Java 8开始实现了这些。强烈建议使用其中一种模式来代替CBC。它将保护数据的完整性及其隐私。

java.security.InvalidKeyException带有“非法密钥大小或默认参数”消息的A 表示加密强度受到限制;无限强度管辖权策略文件不在正确的位置。在JDK中,应将它们放置在${jdk}/jre/lib/security

根据问题描述,听起来策略文件未正确安装。系统可以轻松拥有多个Java运行时。仔细检查以确保使用了正确的位置。

2020-01-10

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29706351/article/details/114181639

智能推荐

count/count if函数的基本用法_countif和count一起怎么用-程序员宅基地

文章浏览阅读2.1k次。count函数,用来计算单元格的数的个数,只是用来计数,并且只有只记录数子的个数,文本的个数是不被记录的。但是很少会用到单纯的count函数,往往在工作中计数是带有条件的。就会用到countif函数COUNTIF函数需要注意的点,COUNTIF函数做判断的时候只能判断单元格的前15位,比如:按照常理来说,在A2-A3单元格格的区域内,等于A2单元格的计数数量应该是为2 的,但是COUNTIF函数只能默认拿单元格的前15位数字,超过的部分就不做统计了。如果遇到这样的情况,就需要借用*,这里用了&连_countif和count一起怎么用

【PaddleSpeech】语音合成-男声_fastspeech2_male_zh_ckpt_1.4.0-程序员宅基地

文章浏览阅读1.1k次,点赞10次,收藏9次。使用PaddleSpeech进行语音合成(男声)_fastspeech2_male_zh_ckpt_1.4.0

html编辑器 br 被div,UEditor百度编辑器中各种html标签被过滤掉的解决办法-程序员宅基地

文章浏览阅读449次。在之前的文章编写过程中,插入JS代码后,第一次文章会显示正常,而之后在后台编辑器中再打开看, 发现好多标签竟然被删掉了。后来发现解决办法非常简单。我们在插入代码后,源码模式下,看起来是正常的,但是为什么保存完之后,数据库中正常,但是编辑器中不正常呢?很多富文本编辑器都有两种初始化方式,以UEditor为例,一种是textarea标签,一种是script标签。举例textarea方式:这里写你的初始..._百度富文本编辑器过滤了html标签

Java大厂笔试&&面试集合大全目录,java笔试面试宝典-程序员宅基地

文章浏览阅读661次,点赞6次,收藏20次。最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)份系统化的资料的朋友,可以添加V获取:vip1024b (备注Java)**(img-0bihoba1-1713545040863)]JAVA相关笔试题,祝各位找到好工作!Java网络安全面试题系列。

Latex 反斜对角省略号实现_latex 省略号-程序员宅基地

文章浏览阅读1.1w次,点赞9次,收藏36次。Latex 反斜对角省略号_latex 省略号

python爬图mzitu_[Python]爬取mzitu网站-程序员宅基地

文章浏览阅读5.7k次。1 importio2 importos3 importre4 importsys5 importdatetime6 from bs4 importBeautifulSoup7 from pxydowwload importrequest8 from pymongo importMongoClient910 sys.stdout = io.TextIOWrapper(sys.stdout.buff..._mzitu

随便推点

Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用!_unity螺旋风特效-程序员宅基地

文章浏览阅读2.2w次,点赞53次,收藏63次。????????即将学会利用粒子系统实现超真实的龙卷风效果。我们要掌握核心科技,提高生产力。其中关键的内容就是旋转,速度,大小变化以及颜色变化。????效果预看视频地址:Unity粒子特效系列-龙卷风效果_哔哩哔哩_bilibili????案例环境Unity 2020.3LTS系列????实践过程首先搞清楚龙卷风分为两部分,从上而下的小部分,从下而上的大部分!接着我们就要分开实现了。上半部分开始之前先确定下思路:需要有旋转 有风就要有速度模块 _unity螺旋风特效

计算机科学与技术的难度大小,计算机科学与技术专业各科难度排行-程序员宅基地

文章浏览阅读1.6k次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼大三下学期NO.1Web数据库技术(3`)专业必修课本学期最难一科,考题是默写程序!填空(通常得不到几分)简答,程序。考前认真复习,课上不上无所谓,最终你还是要背的。重点:第三章:链接herf(填空),登陆表单(html程序题,可以参考习题1)登陆表单验证(JavaScript程序题 P30)第四章:脚本段-表达式-声明-指令的区别(简答),指令元素(简..._编译原理难度排第几

原生小程序 微信小程序 使用ucharts_微信小程序引入ucharts-程序员宅基地

文章浏览阅读2.2k次。一般是uni-app项目使用ucharts在原生微信小程序也是可以使用。方法:## 使用说明请将项目根目录 微信小程序/uCharts-组件/qiun-wx-ucharts/src 下全部文件复制到指定位置,例如该项目的components/qiun-wx-uchart目录下,然后在页面的json配置文件中配置如下:配置好后即可在wxml文件中使用注:示例中uCharts组件仅做演示,实际使用请用码云或者npmjs中最新版本。_微信小程序引入ucharts

1095:数1的个数 题解 信息学奥赛 NOIP_y1095 数1的个数-程序员宅基地

文章浏览阅读1.3k次。关于内容来源于微信公众号:大神编程。已经过原文作者授权。题目:1095:数1的个数超详细动画图文题解链接题解目录(不断更新中)喜欢信息学奥赛的同学们,可以一起交流学习哦官方QQ群:893157498我的QQ群:795233394..._y1095 数1的个数

学习布局(15) 段落类的样式_段落元素设置样式-程序员宅基地

文章浏览阅读220次。line-height: 设置元素当中的每行文本的行高(行间距) .test { width: 300px; height: 40px; margin-bottom: 20px; padding: 10px; background-color:..._段落元素设置样式

opencv: 使用InRange函数进行阈值操作 Thresholding Operations using inRange_inrange和cv2.threshold一起使用-程序员宅基地

文章浏览阅读1.3k次。目标:使用OpenCV cv::inRange 函数进行基本的 阈值操作, 基于像素值在HSV色度空间的范围进行对象检测理论:前一篇文章中我们学习了如何使用cv::threshold 阈值函数进行阈值操作 本文我们将学习使用 cv::inRange 来进行处理 原理是一样的但是现在我们增加了一个我们所需要的 【像素值的范围】HSV色度空间 HSV colorspaceHSV ..._inrange和cv2.threshold一起使用