当前位置:   article > 正文

java.security.InvalidKeyException: Key length not 128/192/256 bits._caused by: java.lang.illegalargumentexception: key

caused by: java.lang.illegalargumentexception: key length not 128/192/256 bi

原理:在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID。而有些设备生成的数字为15位,是由于转化为16进制字符串的时候,去掉了前面的0。(如:部分魅族手机,获取的的设备号应该为“07129c5323b07a5f” ,可是使用代码获取的时候却省略了前面的0只得到了“7129c5323b07a5f”)。

原因分析:问题出现在获取android设备号时,android设备号不为16位字符串,只获取到了15位字符串,导致使用aes加密时出现InvalidKeyException异常。

byte[] key1 = AndroidUtility.getAndroidId(mContext).getBytes();
byte[] aesbyte = aes.encode(lpv.getPassword().toString().getBytes(), key1);
  • 1
  • 2

解决方法:只要把获取到的16进制字符串的android_id转化为十进制,然后再把得到的数字转化为16进制,即可得到正确的android_id。

 public static String getAndroidId(Context context) throws Exception {
    if (StringUtils.isEmpty(SECRET_ID)) {
         SECRET_ID = android.provider.Settings.Secure.getString(context.getContentResolver(),
                    android.provider.Settings.Secure.ANDROID_ID);
            Log.e("========android_ID===========", SECRET_ID);
            if (SECRET_ID.length() < 16) {
                long i1 = Long.valueOf(SECRET_ID, 16);
                SECRET_ID = String.format("%016x", i1);
            }
        }
        if (SECRET_ID.length() > 16) {
            Log.e("========android_ID===Error========", SECRET_ID);
            throw new Exception("ErrorAndroidID");
        }
        return SECRET_ID;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/409059
推荐阅读
相关标签
  

闽ICP备14008679号