• 数据库
  • Mysql
  • Nosql
  • 技术框架
  • Spring
  • Kafka
  • ibatis
  • 分布式
  • Linux
  • 关于我们
  • 注册
  • 登录
  • AES加密欧宝安德拉在linux下相同输入每次加密结果都不同的问题

    2016-3-15 diaba 基础

    现象描述:

    在 windows 操作系统下加解密正常,但部署到 linux 环境中相同的输入加密结果不正确,并且每次运行返回的结果都不同。

    修改后的代码:

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

               //需手动指定 SecureRandom 随机数生成规则

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

               random.setSeed(key.getBytes());

               kgen.init(128, random);

               SecretKey secretKey = kgen.generateKey();

               byte[] enCodeFormat = secretKey.getEncoded();

               SecretKeySpec keySpec = new SecretKeySpec(enCodeFormat, "AES");

               //创建密码器

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

               byte[] byteContent = content.getBytes("utf-8");

               cipher.init(Cipher.ENCRYPT_MODE, keySpec);

               byte[] result =cipher.doFinal(byteContent);

     

    以上是加密过程需手动指定随机数的生成规则,同理在解密过程中也需手动指定随机数的生成规则。

    java.security.SecureRandom

    此类提供加密的强随机数生成器 (RNG)。许多实现都是伪随机数生成器 (PRNG) 形式,这意味着它们将使用确定的欧宝安德拉根据实际的随机种子生成伪随机序列。其他实现可以生成实际的随机数,而另一些实现则可能结合使用这两项技术。

    加密的强随机数至少要遵从《FIPS 140-2, Security Requirements forCryptographic Modules 》中 4.9.1部分指定的统计随机数生成器测试。另外,SecureRandom 还必须产生非确定性输出,因此,正如以下文章中所描述的那样,要求种子材料必须是不可预知的,SecureRandom 的输出必须是加密的强序列:《RFC 1750:Randomness Recommendationsfor Security 》。

    与 Java Security 中其他基于欧宝安德拉的类一样,SecureRandom 也提供了与实现无关的欧宝安德拉,因此,调用方(应用程序代码)会请求特定的 RNG 欧宝安德拉并将它传回到该欧宝安德拉的 SecureRandom 对象中。如果需要,还可以通过特定的提供程序请求特定的欧宝安德拉。请参见 getInstance 方法。

    因此,有以下两种请求 SecureRandom 对象的方法:仅指定欧宝安德拉名称,或者既指定欧宝安德拉名称又指定包提供程序。

    l  如果仅指定欧宝安德拉名称,如下所示:

    SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG");

    系统将确定环境中是否有所请求的欧宝安德拉实现,是否有多个,是否有首选实现。

    l  如果既指定了欧宝安德拉名称又指定了包提供程序,如下所示:

    SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG", "SUN");

    系统将确定在所请求的包中是否有欧宝安德拉实现;如果没有,则抛出异常。

    SecureRandom实现尝试完全随机化生成器本身的内部状态,除非调用方在调用 getInstance 方法之后又调用了setSeed 方法:

    SecureRandomrandom = SecureRandom.getInstance("SHA1PRNG"); random.setSeed(seed);

    在调用方从 getInstance 调用中获得 SecureRandom 对象之后,它可以调用 nextBytes 来生成随机字节:

    byte bytes[] = new byte[20];random.nextBytes(bytes);

    调用方还可以调用 generateSeed 方法来生成给定的种子字节数(例如,为其他随机数量生成器提供种子):

    byte seed[] = random.generateSeed(20);




    标签: aes

    发表评论:

  • 最新文章

  • Go-数组,切片,map
  • scp拷贝文件
  • 笔试题-牛羊吃草问题
  • 笔试题-最少的袋子数装苹果
  • 递归DP-找零钱的方法数
  • 存档

  • 2022年10月(1)
  • 2022年8月(1)
  • 2022年6月(11)
  • 2022年5月(6)
  • 2022年4月(33)
  • 2022年3月(26)
  • 2021年3月(1)
  • 2020年9月(2)
  • 2018年8月(1)
  • 2018年3月(1)
  • 2017年3月(3)
  • 2017年2月(6)
  • 2016年12月(3)
  • 2016年11月(2)
  • 2016年10月(1)
  • 2016年9月(3)
  • 2016年8月(4)
  • 2016年7月(3)
  • 2016年6月(4)
  • 2016年5月(7)
  • 2016年4月(9)
  • 2016年3月(4)
  • 2016年2月(5)
  • 2016年1月(17)
  • 2015年12月(15)
  • 2015年11月(12)
  • 2015年10月(6)
  • 2015年9月(11)
  • 2015年8月(8)
  • 分类

  • Java(4)
  • 基础(8)
  • IO(3)
  • JVM(7)
  • 多线程(11)
  • 调优命令(1)
  • Go(0)
  • 基础(1)
  • Linux(10)
  • mac(12)
  • 数据库(2)
  • Mysql(7)
  • Nosql(8)
  • 技术框架(2)
  • Spring(5)
  • Kafka(3)
  • ibatis(2)
  • 分布式(4)
  • 数据结构与欧宝安德拉(0)
  • 数据结构(6)
  • 欧宝安德拉(44)
  • 笔试题(19)
  • emlog(1)
  • 问题解决记录(2)
  • 随笔记录(26)
  • 金融(1)
  • 工具使用(8)
  • 操作系统(3)
  • 用友NC(3)
  • NC常见问题(2)
  • 热门文章

  • SpringMVC:Null ModelAndView returned to DispatcherServlet with name 'applicationContext': assuming HandlerAdapter completed request handling
  • Mac-删除卸载GlobalProtect
  • java.lang.SecurityException: JCE cannot authenticate the provider BC
  • Idea之支持lombok编译
  • MyBatis-Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}
  • 标签

    mac emlog NC授权 授权数 用户数 破解 天上一天 redis 已达授权数 用友NC 可打印 地上一年 超光速 大于光速 时间静止 时光倒流 相对论 go基础 shell CountDownLatch 狱中诗 线程同步 任务同步 SecureCRT 光标消失 做人 做事 职业发展 选人 转义字符 json 格式错误 内存分区 操作系统 cache 分布式 程序 Linux crontab 定时任务 license 安全 备份 IO操作 同步 异步 阻塞 进程 线程 并发 共享内存 mybatis Improper inline 数据库 mysql 如果为null query paxos 分布式一致性 if ifnull spring ioc BlockingQueue OOM 软引用 弱引用 并行 jvm参数 gc jvm kafka 2016 数据库引擎 加密 解密 java文件压缩 命令 RDB AOF 配置 调优 sharding jvm结构 存储引擎 myiasm innodb 乐观锁 悲观锁 理财 欧宝安德拉 异地多活 ctrl+alt+delete idea lombok springmvc aes 宝宝 项目经理 nc curl 按位操作 逻辑思维 excel 原子增操作 awk printf OceanBase mac锁屏 快捷键 文件监听 confict git 商品管理 sku 自动注入 Apple ID Javassist branch 正则表达式 参数必填 代码优化 grep 程序员 未来 保险 坦然生活 抗风险 优秀经纪人 汉诺塔 递归
  • 最新评论

  • logisqykyk
    Javassist分析、编辑和创建jav...
  • xxedgtb
    Redis—常见参数配置 - 韭菜园 ...
  • wdgpjxydo
    SpringMVC:Null Model...
  • rllzzwocp
    Mysql存储引擎MyISAM和Inno...
  • dpkgmbfjh
    SpringMVC:Null Model...
  • tzklbzpj
    SpringMVC:Null Model...
  • bqwrhszmo
    MyBatis-Improper inl...
  • 乐谱吧
    good非常好
  • diaba
    @diaba:应该说是“时间的度量依据”...
  • diaba
    如果速度增加接近光速、等于光速、甚至大于...
  • 最新微语

  • 从今天起,做一个幸福的人。喂马,砍柴,(思想)周游世界

    2022-03-21 23:31

  • 2022.03.02 23:37:59

    2022-03-02 23:38

  • 几近崩溃后,找到解决方法,总是那么豁然开朗!所以遇到问题要坚持!

    2018-07-18 10:49

  • 2018年关键字“走心”

    2018-03-19 16:07

  • 保护好自己最大的方法是让自己更强大,不要柔弱的像一只绵羊一样,得谁巴拉,就谁巴拉!

    2017-12-20 10:24

  • 更多»

    Powered by emlog 京ICP备15045175号-1 Copyright © 2022