Android RSA加密驗證遇到的坑

最近在接口調(diào)試,公司后臺選用的是 RSA 非對稱加密,需要使用后臺提供的公鑰對請求中的參數(shù)進行加密,中間踩了很多很多坑,最后問題解決后回來看,發(fā)現(xiàn)真的,路走的太彎了,費勁。

  1. base64

android 自帶Base64的類的參數(shù)及其含義(flags)

1.CRLF:這個參數(shù)看起來比較眼熟,它就是Win風(fēng)格的換行符,意思就是使用CR LF這一對作為一行的結(jié)尾而不是Unix風(fēng)格的LF

2.DEFAULT:這個參數(shù)是默認(rèn),使用默認(rèn)的方法來加密

3.NO_PADDING:這個參數(shù)是略去加密字符串最后的“=”

4.NO_WRAP:這個參數(shù)意思是略去所有的換行符(設(shè)置后CRLF就沒用了)

5.URLSAFE:這個參數(shù)意思是加密時不使用對URL和文件名有特殊意義的字符來作為加密字符,具體就是以-和取代+和/

使用DEFAULT參數(shù)時,字符串長度過長會自動換行,一般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 或更高版本上,調(diào)用 Cipher.getInstance("AES/CBC/PKCS7PADDING", "BC") 或者Cipher.getInstance("AES/CBC/PKCS7PADDING", Security.getProvider("BC")) 會報錯 NoSuchAlgorithmException,
原因是 Google 將棄用 AndroidOpenSSL(也稱為Conscrypt)提供程序復(fù)制的 BC 提供程序中的某些功能.

2.刪除加密提供程序。也就是從 P 開始,Crypto 提供程序就不要使用了,使用就要報錯 NoSuchAlgorithmException.

根據(jù) 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");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述 之前一直對加密相關(guān)的算法知之甚少,只知道類似DES、RSA等加密算法能對數(shù)據(jù)傳輸進行加密,且各種加密算法各有...
    Henryzhu閱讀 3,221評論 0 14
  • 前言 從前一篇網(wǎng)絡(luò)安全基礎(chǔ)要點知識介紹中可以知道,在網(wǎng)絡(luò)通信中,通信傳輸數(shù)據(jù)容易被截取或篡改,如果在傳輸用戶隱私數(shù)...
    若風(fēng)丶閱讀 1,999評論 0 0
  • 1. ASCII 編碼 ASCII(American Standard Code for Information ...
    s酸菜閱讀 8,869評論 0 8
  • 今天在跑Android P模擬器的時候,應(yīng)用突然報錯。 查看錯誤日志: 繼續(xù)往上查,無此算法對應(yīng)我自己設(shè)置的NoS...
    程序員張晴天閱讀 4,989評論 3 7
  • 這篇文章主要講述在Mobile BI(移動商務(wù)智能)開發(fā)過程中,在網(wǎng)絡(luò)通信、數(shù)據(jù)存儲、登錄驗證這幾個方面涉及的加密...
    雨_樹閱讀 3,040評論 0 6

友情鏈接更多精彩內(nèi)容