Linux操作系统下每次AES加密结果不一致的原因

来源:互联网 发布:python anaconda 安装 编辑:程序博客网 时间:2024/06/06 02:23

定位在生成KEY的方法上,如下:

  public static SecretKey getKey (String strKey) {              try {                          KeyGenerator _generator = KeyGenerator.getInstance( "AES" );                 _generator.init(128, new SecureRandom(strKey.getBytes()));                 return _generator.generateKey();             }  catch (Exception e) {                  throw new RuntimeException( " 初始化密钥出现异常 " );             }           }  

修改到如下方式,问题解决:

public static SecretKey getKey(String strKey) {        try {                    KeyGenerator _generator = KeyGenerator.getInstance( "AES" );            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG" );           secureRandom.setSeed(strKey.getBytes());           _generator.init(128,secureRandom);               return _generator.generateKey();       }  catch (Exception e) {            throw new RuntimeException( " 初始化密钥出现异常 " );       }     }

原因分析:

SecureRandom 实现随操作系统本身的內部状态,除非调用方在调用 getInstance 方法之后又调用了 setSeed 方法;该实现在 windows 上每次生成的 key 都相同,但是在 solaris 或部分 linux 系统上则不同。

0 0
原创粉丝点击