1. 程式人生 > >RSA加密如何讓字符串NSString如何轉成SecKeyRef?

RSA加密如何讓字符串NSString如何轉成SecKeyRef?

ica base64 ews gtm sda 代碼 服務器 ack eat

RSA加密如何讓字符串NSString如何轉成SecKeyRef?

註意:此方法只適用於服務器生成的der格式的公鑰字符串,dem格式的會在SecTrustCreateWithCertificates函數處崩潰。

技術分享圖片看到網上有很多朋友都提出過這個問題,也沒有詳細的解答,感覺挺坑的,因為我之前也在為這個問題糾結了好久,之後是在技術群有高人相助才解決掉的,廢話不多說直接上代碼吧!

這是當時後臺提供給我的公鑰字符串:服務器是java

#defineRSA_PUBLIC_KEY @"MIICLTCCAZagAwIBAgIEVXVrlDANBgkqhkiG9w0BAQUFADBaMQ0wCwYDVQQGEwRtYWhxMQ0wCwYDVQQIEwRtYWhxMQ0wCwYDVQQHEwRtYWhxMQ0wCwYDVQQKEwRtYWhxMQ0wCwYDVQQLEwRtYWhxMQ0wCwYDVQQDEwRtYWhxMCAXDTE1MDYwODEwMTY1MloYDzIxMTMxMjMxMTAxNjUyWjBaMQ0wCwYDVQQGEwRtYWhxMQ0wCwYDVQQIEwRtYWhxMQ0wCwYDVQQHEwRtYWhxMQ0wCwYDVQQKEwRtYWhxMQ0wCwYDVQQLEwRtYWhxMQ0wCwYDVQQDEwRtYWhxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDzwZjejBFhG+1K5f2frVCJ2UeIUCkwwCg1ip50hYN1yJLCje+Iya3LHEtv/smqMxxuQuMiE7bOUkN/NHFssfGDt99ff98b0xdWXj4x9/WqNWcwteJvcJwgrQpHhfy+wXOI7DDz14b/qJJ6ES42EZ+M/rg7jw9tQ/Z2cWc56gLVGwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAE0wDcQTY+gp7Hd2fWl4Yn/6zOmk6p0z5CBHKzFGw1+aTMcKGli4m13Dq5IIvPQV/CY0cKrcXSvNzTs9OXy4gPPyCnhZ+XavKI9y2jlCDzPPWKcMiMWu1mBfIQOV2hwpRpE1sG8uSPqf2S+nsREwHj95tEdPFHCn2OwLOjLgAMMc"


技術分享圖片註意:跟後臺服務器一定要溝通好,用什麽格式 不然會有很多坑等著你去跳,編碼格式建議采用(utf-8)

//獲取公鑰

static SecKeyRef _public_key=nil;


- (SecKeyRef) getPublicKey{// 從公鑰證書文件中獲取到公鑰的SecKeyRef指針

if(_public_key == nil){

//由於後臺給我的字符串時base過的所以要轉回來,沒有的請忽視

NSData *certificateData = [GTMBase64 decodeString:RSA_PUBLIC_KEY];

SecCertificateRef myCertificate = SecCertificateCreateWithData(kCFAllocatorDefault, (CFDataRef)certificateData);

SecPolicyRef myPolicy = SecPolicyCreateBasicX509();

SecTrustRef myTrust;

OSStatus status = SecTrustCreateWithCertificates(myCertificate,myPolicy,&myTrust);

SecTrustResultType trustResult;

if (status == noErr) {

status = SecTrustEvaluate(myTrust, &trustResult);

}

_public_key = SecTrustCopyPublicKey(myTrust);

CFRelease(myCertificate);

CFRelease(myPolicy);

CFRelease(myTrust);

}

return _public_key;

}

RSA加密如何讓字符串NSString如何轉成SecKeyRef?