rsa從cer證書中拿公鑰進行加密

2021-07-27 08:55:49 字數 2931 閱讀 8339

起初,讀召輝給的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...