起初,讀召輝給的cer證書的時候,
seccertificatecreatewithdata
總是返回為nil,原因是因為這個證書是伺服器自己生成的,不是正規的ca機構頒發的,蘋果安全性要求是很高的,所以這個讀不出來,直接導致後面的崩潰。後來折騰了半天,比如直接從證書裡面匯出字串作為公鑰,也不行,安卓這樣也是不行的。
後來迪哥又生成了個der證書,這樣讀就是正常的,這樣就能正常的拿到公鑰。
- (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;
} //利用公鑰 rsa加密
- (nsdata
*) encryptwithdata:(
nsdata
*)content
void
*plain =
malloc
(plainlen);
[content
getbytes
:plain
length
:plainlen];
size_t
cipherlen =
256;
// 目前使用的rsa加密長度為2048bits(即256bytes)
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
- (nsstring
*) encrypttostring:(
nsstring
*)content
// convert nsdata to nsstring
- (nsstring
*)base64fordata:(
nsdata
*)thedata }
nsinteger
theindex = (i /
3) * 4;
output[theindex +
0] = table[(value >>
18) &
0x3f];
output[theindex +
1] = table[(value >>
12) &
0x3f];
output[theindex +
2] = (i +
1) < length ? table[(value >>
6) &
0x3f
] :
'=';
output[theindex +
3] = (i +
2) < length ? table[(value >>
0) &
0x3f
] :
'='; }
return
[[nsstring
alloc
] initwithdata
:data
encoding
:nsutf8stringencoding];
} - (void
)dealloc
公鑰,私鑰,數字證書,證書中心
加密的目的 1.內容加密 我傳送給你的內容,只有你能看到。2.身份驗證 你可以從我發的資訊中確定,該資訊是我發的,不是別人冒充的。一,公鑰和私鑰 網際網路上,每個人都有乙個配對的公鑰 私鑰。公鑰,就是給大家用的。私鑰,就是自己保管的。這一對公鑰和秘鑰互為鎖和鑰匙,也就是 公鑰加密的內容只能用私鑰解密...
openssl從記憶體中讀取RSA公鑰
背景 近期需要在專案中進行rsa簽名驗證,廠商會給出pem格式的rsa公鑰。在以往專案中使用openssl讀取rsa公鑰時基本都是從pem檔案中讀取,基本沒什麼問題,可最近由於專案需要需要從資料庫中讀取rsa公鑰,經查資料發現openssl提供了bio介面以支援各種形式的秘鑰讀取。在使用bio介面從...
Postman報文進行加密之RSA公鑰加密
rsa公鑰加密和私鑰加密整個結構是一致的,postman報文進行加密之rsa bate64 中私鑰做的簽名,這裡rsa公鑰是進行加密。rsa 使用公鑰對 aes密碼進行加密 functionpubencrypt pubencrypt key aeskey console info pulencryp...