正如CodeInChaos正确推测的那样,当使用Cipher.ENCRYPT_MODE创建AESCipher实例时,SecureRandom实例用于派生随机IV.但是,在解密模式下创建Cipher实例时,请将其作为参数提供.这个小小的无意义代码片段显示了一个例子.

public static void main(String[] args) throws Exception {

SecureRandom secRandom = SecureRandom.getInstance("SHA1PRNG");

KeyGenerator kg = KeyGenerator.getInstance("AES");

kg.init(128, secRandom);

Key secretKey = kg.generateKey();

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

AESCipher.init(Cipher.ENCRYPT_MODE, secretKey, secRandom);

IvParameterSpec iv = new IvParameterSpec(AESCipher.getIV());

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

AESCipher.init(Cipher.DECRYPT_MODE, secretKey,iv, secRandom);

}

此外,您声称使用静态种子初始化SecureRandom实例表明您对该类的误解.当您提供相同的种子时,SecureRandom不保证您将获得相同的输出.如果仔细观察Javadocs,你会发现它会尽可能地从其他来源提供一些真正的熵.

编辑1:

感谢owlstead在审查答案时通常的彻底性.有关其他讨论,请参阅他的answer相关问题. SHA1PRNG的源代码可在线获取here.遵循这一点有点棘手,但如果在向实例询问任何随机字节之前提供种子,那么输出将是完全确定的.所以我之前的陈述不正确.

cipher java aes 模式_java – 为什么我的AES Cipher在init的DECRYPT_MODE上抛出一个InvalidKeyException...相关推荐

  1. java中在方法体内抛出异常_Java异常处理中___用于方法体内,抛出一个异常对象。...

    Java异常处理中___用于方法体内,抛出一个异常对象. 答: throw; 智慧职教: 运输高致病性动物病原微生物菌(毒)种或者样本的,与内包装要求错误的是 答:E.主容器表面标注"高致病 ...

  2. java异常在哪一层捕获_当在一个方法的代码中抛出一个检测异常时,该异常或被方法中的 ( )结构 捕获,或者在方法的 ( ) 中声明_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

  3. java aes 模式_Java实现多种加密模式的AES算法-总有一种你用的着!

    前言 对于AES算法,相信很多程序员小伙伴都听过.用过,其原理本文就不介绍了,而是讲讲在实际项目中的应用.前几天,项目需要跟乙方接口对接,乙方提供加密后的信息串,而我这边负责对加密串进行解密.其中加解 ...

  4. java模板方法模式_Java中的模板方法模式

    java模板方法模式 模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更 ...

  5. java命令模式_Java中的命令设计模式

    java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...

  6. java代理模式_Java代理

    java代理模式 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...

  7. java 模板模式_Java模板模式(Template模式)

    Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...

  8. java 设置模式_Java设计模式百例 - 调停者模式

    调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的.这种模式提供了一个调停者类,用来充当"中心化"或"总线化"的角色,与各个 ...

  9. java aop模式_Java的Spring框架下的AOP编程模式示例

    Spring框架的关键组件是面向方面编程(AOP)框架.面向方面的编程不仅打破程序逻辑分成不同的部分称为所谓的担忧.跨越多个点的应用程序的功能被称为横切关注点和这些横切关注点是从应用程序的业务逻辑概念 ...

最新文章

  1. 【spring】使用spring的环境配置及从官网获得配置文件所用代码的方法
  2. 关于Sqlite的一个demo
  3. 触屏设备手势简历研究
  4. 如何:为 Windows 窗体 RichTextBox 控件设置字体属性
  5. 【AI2】更新app inventor2离线开发环境AppInventor2021,安卓app图形化开发环境
  6. Division 贪心,模拟 牛客练习赛95
  7. 数学之美 系列十一 - Google 阿卡 47 的制造者阿米特.辛格博士
  8. java线程暂停与恢复suspend和resume
  9. 上海梵科信息科技有限公司
  10. 花花酱leetcode 题目-二分搜索
  11. flowable 多实例动态添加人
  12. Ubuntu12.04配置nginx+php+mysql
  13. java访问修饰符_Java访问修饰符
  14. logback mysql 中文乱码_[Logback+slf4j]MysqlDBAppender正确配置方法以及错误处理
  15. sys.dm_db_wait_stats
  16. C语言 Linux网络编程(C/S架构) 在线词典
  17. Jdk8下载安装配置教程
  18. 生成验证码 大写、小写字母,数字 java
  19. 数据可视化----常用图表样式
  20. 迪赛智慧数——柱状图(多色柱状图):十大高薪行业

热门文章

  1. NLP中的词向量总结与实战:从one-hot到bert
  2. 计算机考试题库电子版,全国计算机等级考试一级试题库大全完整版附参考答案...
  3. php redis用途,redis可以做什么?
  4. Tiktok代运营才是跨境卖家的未来?别再错过这个风口了!
  5. Leetcode每日一题:328.odd-even-linked-list(奇偶链表)
  6. Python HTTP库:requests快速入门
  7. 图解系列之JAVA执行过程
  8. JQuery的ajaxFileUpload的使用
  9. LeetCode刷题(39)--Set Matrix Zeros
  10. 我的世界工业服务器透视修改,教程/透视镜 - Minecraft Wiki,最详细的官方我的世界百科...