第一步,製作自簽名的證書
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...