Android:7.0 后加密库 Crypto 被废弃后的爬坑指南

本文介绍了在Android 7.0及以上版本中,由于Crypto库被废弃导致的加密问题。作者指出,直接使用密码生成密钥的方式已被认为不安全,并在Android N中被废弃。解决方案包括遵循官方提供的链接进行密钥处理,以及参考提供的样例代码和GitHub项目来修复加密逻辑。
摘要由CSDN通过智能技术生成

【转载请注明出处】
笔者:DrkCore (http://blog.csdn.net/DrkCore)
原文链接:(http://blog.csdn.net/drkcore/article/details/69931654)

问题描述

笔者偶尔会写一些自己的小应用,其中有个功能就是九宫格应用锁。通常情况下我们是用数字来标志九宫格的解锁顺序,并将该顺序组成字符串加密了放在 SharedPreferences 中的。一切都很正常,直到笔者将项目的 targetSdkVersion 设置为了 25 后程序崩溃了:

 ********** PLEASE READ ************
 *
 * New versions of the Android SDK no longer support the Crypto provider.
 * If your app was relying on setSeed() to derive keys from strings, you
 * should switch to using SecretKeySpec to load raw key bytes directly OR
 * use a real key derivation function (KDF). See advice here :
 *
  http://android-developers.blogspot.com/2016/06/security-crypto-provider-deprecated-in.html
 ***********************************

我们知道加密算法都是需要密钥的,比如 AES 算法支持128 比特、192 比特和 256 比特三种长度的密钥,通常这些密钥会被转化成字节数组明文写在代码中或者写入成 KeyStore 文件。如果你是直接使用这些密钥的话是不会有任何问题的,但是有的时候我们需要通过一个字符串格式的密码来生成密钥。

按照搜索引擎上找来的方法你可能会写出如下的代码,然后遇到和笔者一样的问题:


    public static final String DEPREACATED_SECURE_ALGORITHM_SHA1PRNG = "SHA1PRNG";
    public static final String DEPREACATED_SECURE_PROVIDER_CRYPTO = "Crypto";

    /**
     * 按照指定编码从字符串中生成指定长度的密钥 key。
     *
     * @param password
     * @param charset
     * @param keyBitLen
     * @return
     * @throws NoSuchProviderException
     * @throws NoSuchAlgorithmException
     */
    @Deprecated
    public 
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值