在ios開發中有多少常用的加密解密方式(備用)

2021-09-07 03:20:28 字數 3105 閱讀 5431

最常用的是md5和base64編碼,還有des 3des aes加密

最近幾天折騰了一下如何在ios上使用rsa來加密。ios上並沒有直接的rsa加密api。但是ios提供了x509的api,而x509是支援rsa加密的。因此,我們可以通過製作自簽名的x509證書(由於對安全性要求不高,我們並不需要使用ca認證的證書),再呼叫x509的相關api來進行加密。接下來記錄一下整個流程。

第一步,製作自簽名的證書

1.最簡單快捷的方法,開啟terminal,使用openssl(mac os x自帶)生成私鑰和自簽名的x509證書。

openssl req -x509 -out public_key.der -outform der -new -newkey rsa:1024 -keyout private_key.pem -days 3650

按照命令列的提示輸入內容就行了。

幾個說明:

public_key.der是輸出的自簽名的x509證書,即我們要用的。

private_key.pem是輸出的私鑰,用來解密的,請妥善保管。

rsa:1024這裡的1024是金鑰長度,1024是比較安全的,如果需要更安全的話,可以用2048,但是加解密代價也會增加。

-days:證書過期時間,一定要加上這個引數,預設的證書過期時間是30天,一般我們不希望證書這麼短就過期,所以寫上比較合適的天數,例如這裡的3650(10年)。

事實上,這一行命令包含了好幾個步驟(我研究下面這些步驟的原因是我手頭已經由乙個private_key.pem私鑰了,想直接用這個來生成x509證書,也就是用到了下面的2-3)

1)建立私鑰

openssl genrsa -out private_key.pem 1024

2)建立證書請求(按照提示輸入資訊)

openssl req -new -out cert.csr -key private_key.pem

3)自簽署根證書

openssl x509 -req -in cert.csr -out public_key.der -outform der -signkey private_key.pem -days 3650

2.驗證證書。把public_key.der拖到xcode中,如果檔案沒有問題的話,那麼就可以直接在xcode中開啟,看到證書的各種資訊。

第二步,使用public_key.der來進行加密。

1.匯入security.framework。

2.把public_key.der放到mainbundle中(一般直接拖到xcode就行啦)。

3.從public_key.der讀取公鑰。

4.加密。

下面是參考**(只能用於加密長度小於等於116位元組的內容,適合於對密碼進行加密。使用了arc,不過還是要注意部分資源需要使用cfrealse來釋放)

rsa.h

//// rsa.h

//#import

@inte***ce rsa : nsobject

- (nsdata *) encryptwithdata:(nsdata *)content;

- (nsdata *) encryptwithstring:(nsstring *)content;

@end

rsa.m

//// rsa.m

//#import "rsa.h"

@implementation rsa

- (id)init

nsdate *publickeyfilecontent = [nsdata datawithcontentsoffile:publickeypath];

if (publickeyfilecontent == nil)

certificate = seccertificatecreatewithdata(kcfallocatordefault, ( __bridge cfdataref)publickeyfilecontent);

if (certificate == nil)

policy = secpolicycreatebasicx509();

osstatus returncode = sectrustcreatewithcertificates(certificate, policy, &trust);

if (returncode != 0)

sectrustresulttype trustresulttype;

returncode = sectrustevaluate(trust, &trustresulttype);

if (returncode != 0)

publickey = sectrustcopypublickey(trust);

if (publickey == nil)

maxplainlen = seckeygetblocksize(publickey) - 12;

return self;

}- (nsdata *) encryptwithdata:(nsdata *)content

void *plain = malloc(plainlen);

[content getbytes:plain

length:plainlen];

size_t cipherlen = 128; // 當前rsa的金鑰長度是128位元組

void *cipher = malloc(cipherlen);

osstatus returncode = seckeyencrypt(publickey, ksecpaddingpkcs1, plain,

plainlen, cipher, &cipherlen);

nsdata *result = nil;

if (returncode != 0)

else

free(plain);

free(cipher);

return result;

}- (nsdata *) encryptwithstring:(nsstring *)content

- (void)dealloc

@end

使用方法:

rsa *rsa = [[rsa alloc] init];

if (rsa != nil)

else

iOS開發之常用的加密方法

開發中常用的加密方法 aes加密 加密過後以nsdata的形式存下來,如若想以nsstring的形式儲存,那對nsdata進行base64編碼 base64 使用者名稱密碼進行base64加密 md5加密 特點 輸入兩個不同的明文不會得到相同的輸出值,根據輸出值不能得到原始明文,即過程不可逆不能解密...

iOS開發中常用到的加密方式

1 base64 1.1 簡介 base64編碼的思想是是採用64個基本的ascii碼字元對資料進行重新編碼。它將需要編碼的資料拆分成位元組陣列。以3個位元組為一組。按順序排列24位資料,再把這24位資料分成4組,即每組6位。再在每組的的最高位前補兩個0湊足乙個位元組。這樣就把乙個3位元組為一組的資...

iOS開發中常用到的加密方式

1 base64 1.1 簡介 base64編碼的思想是是採用64個基本的ascii碼字元對資料進行重新編碼。它將需要編碼的資料拆分成位元組陣列。以3個位元組為一組。按順序排列24位資料,再把這24位資料分成4組,即每組6位。再在每組的的最高位前補兩個0湊足乙個位元組。這樣就把乙個3位元組為一組的資...