Android Keystore 對稱 非對稱加密

2021-09-08 13:53:41 字數 4487 閱讀 9813

android資料加密:

anroid資料加密方式

android 提供了 keystore 等可以長期儲存和檢索加密金鑰的機制,android keystore 系統特別適合於儲存加密金鑰。

它提供了限制何時以何種方式使用金鑰的方法,比如使用金鑰時需要使用者認證或限制金鑰只能在加密模式下使用。

乙個應用程式只能編輯、儲存、取出自己的金鑰。

作用:keystore 適用於生成和儲存金鑰,這些金鑰可以用來加密執行時獲取到的資料,比如執行時,使用者輸入的密碼,或者服務端傳下來的 token。

操作方式1. 使用對稱式加解密,但只能在api level 23+使用

對稱式加解密(aes)速度較快,但是對稱式的key若要存在keystore裡,api level一定要在23以上才支援,23以下是無法存入keystore的,非對稱式的key則不在此限。

2. 想相容各api版本(23以下也能用)

考慮到加解密效能、版本相容,下面會介紹用非對稱式+對稱式來加解密。

使用keystore產生隨機的rsa key;

產生aes key,並用rsa public key加密後存入sharedprefs;

從sharedprefs取出aes key,並用rsa private key解密,用這把aes key來加解密資訊;

主流的加密方式有:(對稱加密)aes、des        (非對稱加密)rsa、dsa

工作模式:

des一共有:

電子密碼本模式(ecb)、加密分組鏈結模式(cbc)、加密反饋模式(cfb)、輸出反饋模式(ofb);

aes一共有:

電子密碼本模式(ecb)、加密分組鏈結模式(cbc)、加密反饋模式(cfb)、輸出反饋模式(ofb)、計數器模式(ctr),伽羅瓦計數器模式(gcm)

pkcs5padding是填充模式,還有其它的填充模式;

對於初始化向量iv: 初始化向量引數,aes 為16bytes. des 為8bytes

1

private

static

final string keystore_provider = "androidkeystore";

2private

static

final string aes_mode = "aes/gcm/nopadding";

3private

static

final string rsa_mode = "rsa/ecb/pkcs1padding";45

private

static

final string keystore_alias = "keystore_demo";

67 keystore mkeystore =keystore.getinstance(keystore_provider);

8 mkeystore.load(null);

(1)產生隨機的rsa key

產生rsa key會使用到keypairgenerator:

其中keypairgeneratorspec

在api 23以上已經deprecated了;

api level 23以上改使用keygenparameterspec

1

private

void genkeystorekey(context context) throws

exception else

7 }

api23 以上使用 keygenparameterspec:

1 @requiresapi(api =build.version_codes.m)

2private

void generatersakey_aboveapi23() throws

exception

api23 以下使用 keypairgeneratorspec:

1

private

void generatersakey_belowapi23(context context) throws

nosuchalgorithmexception, nosuchproviderexception, invalidalgorithmparameterexception

(2)產生aes key後, 並用rsa public key加密後存入sharedprefs

1

private

void genaeskey() throws

exception

1] 加密儲存:使用rsa public key 加密 aes key,存入快取中。

2]  解密使用:使用rsa private key 解密 得到 aes key。

1

private string encryptrsa(byte plaintext) throws

exception

1112

private

byte decryptrsa(string encryptedtext) throws

exception

獲取aes :

1 private secretkeyspec getaeskey() throws exception

再使用aes 加解密內容:

對於:cipher 初始化

1

//例項化加密類,引數為加密方式,要寫全

2 cipher cipher = cipher.getintance("aes/cbc/pkcs5padding");34

//初始化,此方法可以採用三種方式,按伺服器要求來新增。5//

(1)無第三個引數6//

(2)第三個引數為securerandom random = new securerandom();7//

中random物件,隨機數。(aes不可採用這種方法)8//

(3)第三個引數:ivparameterspec ivspec = new ivparameterspec(iv.getbytes);

9 cipher.init(cipher.encrypt_mode, keyspec, ivspec/random);

具體使用:

1

/**2

* aes encryption3*

@param

plaintext: a string which needs to be encrypted.4*

@return

a base64's string after encrypting.5*/

6private string encryptaes(string plaintext) throws

exception

1718

private string decryptaes(string encryptedtext) throws

exception

iv 初始化向量

1

private

byte

getiv()

關於rsa:

使用rsa加解密時,在較低版本的手機上可能無法選擇oaep(最優非對稱加密填充,rsa的加密解密是基於oaep的)這個模式;

因此可以改使用rsa_pkcs1_padding模式,使用這個模式的話,輸入必須比rsa的key至少11個位元組,如果需要被加密的字串過長的話,可以在產生key時指定key size長度,或是將字串分段加密。

以預設key size = 2048bit(256byte)來說,輸入最長只能到256–11=245byte,我們可以透過setkeysize(int keysize)指定key的長度,但是key size越大,加解密時速度就越慢。

1 keygenparameterspec keygenparameterspec = new

keygenparameterspec

2 .builder(keystore_alias, keyproperties.purpose_encrypt |keyproperties.purpose_decrypt)

3.setdigests(keyproperties.digest_sha256, keyproperties.digest_sha512)

4.setencryptionpaddings(keyproperties.encryption_padding_rsa_pkcs1)

5 .setkeysize(4096)

6 .build();

引言:rsa supported sizes: 512, 768, 1024, 2048, 3072, 4096

rsa pkcs1 填充方式

區塊加密法工作模式

加密(對稱 非對稱)

一 對稱加密 symmetric cryptography 對稱加密是最快速 最簡單的一種加密方式,加密 encryption 與解密 decryption 用的是同樣的金鑰 secret key 這種方法在密碼學中叫做對稱加密演算法。對稱加密有很多種演算法,由於它效率很高,所以被廣泛使用在很多加密...

對稱加密 非對稱加密

區別在於加密金鑰和解密金鑰是否一樣,一樣則是對稱加密,不一樣則是非對稱加密。對稱加密計算量小,但若不同的客戶端使用不能的金鑰時,伺服器的複雜大。常用的對稱加密包括 des 3des aes des 3des使用的架構為feistel。des金鑰長度為56位,3des相容des,可設定3個56位密碼,...

對稱 非對稱密碼體制

商務應用對於安全的需求 保密性 confidentiality 完整性 integrity 真實性 authenticity 不可否認性 non repudiation 相對應的電子威脅 偷聽病毒,對資料的修改 哄騙 同步氾濫 需求解決方案 保密性 資料加密 真實性 數字簽名 證書 數字身份證明 完...