iOS下的RSA加密方法

2021-06-28 09:14:44 字數 3151 閱讀 9170

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

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

參考:

1. (原創)如何生成以及匯入x.509證書

2. ios下使用rsa演算法與php進行加解密通訊

3. certificate, key, and trust services reference

4. x509

5. rsa

類別: ios

iOS介面的RSA加密演算法

在ios中使用rsa加密解密,需要用到.der和.p12字尾格式的檔案,其中.der格式的檔案存放的是公鑰 public key 用於加密,p12格式的檔案存放的是私鑰 private key 用於解密.首先需要先生成這些檔案,然後再將檔案匯入工程使用。其實不用這兩個證書也可以,這兩個證書只是用來存...

ios 加密方法

ios常用加密方法 aes md5 base64 1 aes加密 nsdata aes.h檔案 nsdata aes.h smile import class nsstring inte ce nsdata encryption nsdata aes256encryptwithkey nsstrin...

iOS 關於MD5加密,AES加密,RSA加簽驗籤

rsa加簽 加密 公鑰放在客戶端,並使用公鑰對資料進行加密,服務端拿到資料後用私鑰進行解密 加簽 私鑰放在客戶端,並使用私鑰對資料進行加簽,服務端拿到資料後用公鑰進行驗籤。rsa加簽 plainstr為加密字段 privkey為私鑰 使用者儲存 nsstring rsasha1signstr nss...