Android RSA加密验证遇到的坑

最近在接口调试,公司后台选用的是 RSA 非对称加密,需要使用后台提供的公钥对请求中的参数进行加密,中间踩了很多很多坑,最后问题解决后回来看,发现真的,路走的太弯了,费劲。

  1. base64

android 自带Base64的类的参数及其含义(flags)

1.CRLF:这个参数看起来比较眼熟,它就是Win风格的换行符,意思就是使用CR LF这一对作为一行的结尾而不是Unix风格的LF

2.DEFAULT:这个参数是默认,使用默认的方法来加密

3.NO_PADDING:这个参数是略去加密字符串最后的“=”

4.NO_WRAP:这个参数意思是略去所有的换行符(设置后CRLF就没用了)

5.URLSAFE:这个参数意思是加密时不使用对URL和文件名有特殊意义的字符来作为加密字符,具体就是以-和取代+和/

使用DEFAULT参数时,字符串长度过长会自动换行,一般android编解码都是使用NO_WRAP.

  1. 获取公钥

在使用 KeyFactory.getInstance("RSA", "BC") 获取 keyFactory 时会抛出 NoSuchAlgorithmException 异常.

在 error 中会有这么一段话:

The BC provider no longer provides an implementation for KeyFactory.RSA. Please see [https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html](https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html) for more details.

原因是 BC 提供者不再提供 KeyFactory.RSA 的接口....太坑了

https://android-developers.googleblog.com/2018/03/cryptography-changes-in-android-p.html

1.Provider 被更改。在 Android P 或更高版本上,调用 Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC") 或者Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC")) 会报错 NoSuchAlgorithmException,
原因是 Google 将弃用 AndroidOpenSSL(也称为Conscrypt)提供程序复制的 BC 提供程序中的某些功能.

2.删除加密提供程序。也就是从 P 开始,Crypto 提供程序就不要使用了,使用就要报错 NoSuchAlgorithmException.

根据 google 建议将代码修改如下:

KeyFactory keyFactory;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
      keyFactory = KeyFactory.getInstance("RSA");     //适配Android P及以后版本,否则报错NoSuchAlgorithmException
} else {
      keyFactory = KeyFactory.getInstance("RSA", "BC");
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 之前一直对加密相关的算法知之甚少,只知道类似DES、RSA等加密算法能对数据传输进行加密,且各种加密算法各有...
    Henryzhu阅读 3,064评论 0 14
  • 前言 从前一篇网络安全基础要点知识介绍中可以知道,在网络通信中,通信传输数据容易被截取或篡改,如果在传输用户隐私数...
    若风丶阅读 1,896评论 0 0
  • 1. ASCII 编码 ASCII(American Standard Code for Information ...
    s酸菜阅读 8,745评论 0 8
  • 今天在跑Android P模拟器的时候,应用突然报错。 查看错误日志: 继续往上查,无此算法对应我自己设置的NoS...
    程序员张晴天阅读 4,942评论 3 7
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 2,736评论 0 6