iOS系統提供的RSA 不對稱加密和解密和對稱加密解密
對iOS平臺下使用CommonCrypto與Security.framework的加密與解密,簽名與簽名的基本技術進行了總結。
主要實現了以下功能
1.非對稱加密演算法
RSA
包含公私鑰的生成、公鑰加密、私鑰解密、私鑰簽名、公鑰驗籤功能。證書資訊的讀取。以及金鑰在KeyChain中儲存,查詢,刪除等功能。
2.對稱加密演算法
DES、3DES、AES
主要實現加密與解密功能。
3.雜湊演算法
SHA1、SHA224、SHA256、SHA384、SHA512
MD2、MD4、MD5
以下是詳細的說明。
首先,從非對稱加密演算法開始,在開發的過程中引用以下標頭檔案就足夠了
<Security/Security.h>
1.Security.framework中的基本資料型別
SecCertificateRef-X.509證書 .cer或者.der檔案
SecIdentityRef-同時包含私鑰與公鑰證書資訊 .p12檔案或者.pfx檔案
SecKeyRef-代表一個加密金鑰,私鑰或者公鑰
SecTrustRef-X.509證書策略
SecPolicyRef-X.509證書信任服務
SecAccessControlRef-某個物件的訪問控制權限
2.Security.framework中方法執行後的狀態結果資訊
CF_ENUM(OSStatus) { errSecSuccess = 0, /* No error. */ errSecUnimplemented = -4, /* Function or operation not implemented. */ errSecIO = -36, /* I/O error (bummers) */ errSecOpWr = -49, /* file already open with with write permission */ errSecParam = -50, /* One or more parameters passed to a function where not valid. */ errSecAllocate = -108, /* Failed to allocate memory. */ errSecUserCanceled = -128, /* User canceled the operation. */ errSecBadReq = -909, /* Bad parameter or invalid state for operation. */ errSecInternalComponent = -2070, errSecNotAvailable = -25291, /* No keychain is available. You may need to restart your computer. */ errSecDuplicateItem = -25299, /* The specified item already exists in the keychain. */ errSecItemNotFound = -25300, /* The specified item could not be found in the keychain. */ errSecInteractionNotAllowed = -25308, /* User interaction is not allowed. */ errSecDecode = -26275, /* Unable to decode the provided data. */ errSecAuthFailed = -25293, /* The user name or passphrase you entered is not correct. */ };
3.讀取證書檔案,從資料流到證書型別SecCertificateRef的轉換
<Security/SecCertificate.h>
SecCertificateCreateWithData
4.從證書中獲取公鑰SecKeyRef
<Security/SecPolicy.h> SecPolicyCreateBasicX509 //建立SecPolicyRef <Security/SecTrust.h> SecTrustCreateWithCertificates //建立SecTrustRef SecTrustCopyPublicKey //從SecTrustRef中拷貝公鑰
5.讀取私鑰檔案,從資料流到SecIdentityRef的轉換
SecPKCS12Import //私鑰資料流檔案匯入keychain
6.從私鑰檔案中獲取私鑰
SecIdentityCopyPrivateKey //從SecIdentityRef拷貝私鑰
7.加密與解密主要使用了以下四個函式
<Security/SecKey.h>
SecKeyEncrypt //加密
SecKeyDecrypt //解密
SecKeyRawSign //簽名
SecKeyRawVerify //驗籤
8.生成公私鑰對,儲存或者不儲存到鑰匙串
<Security/SecKey.h>
SecKeyGeneratePair
其次,為對稱加密演算法。
在開發過程中需要引用以下標頭檔案
<CommonCrypto/CommonCrypto.h>
主要有如下兩個思路
順序呼叫以下函式
CCCryptorCreateWithMode //建立CCCryptorRef物件
CCCryptorUpdate
CCCryptorFinal //並已定需要呼叫該方法
另外兩個函式的說明
CCCryptorGetOutputLength //獲取密文輸出緩衝區長度
CCCryptorRelease //釋放CCCryptorRef物件
或者直接呼叫以下函式完成加密過程
CCCrypt
最後,為雜湊演算法。
雜湊演算法的計算流程大致相同。方法宣告在這裡
<CommonCrypto/CommonDigest.h>
以SHA1為例,有兩個思路
順序呼叫以下函式
CC_SHA1_Init
CC_SHA1_Update
CC_SHA1_Final
或者直接呼叫以下函式
CC_SHA1
HMAC是金鑰相關的雜湊運算訊息認證碼(Hash-based Message Authentication Code),HMAC運算利用雜湊演算法,以一個金鑰和一個訊息為輸入,生成一個訊息摘要作為輸出。
其支援SHA1和MD5兩種雜湊演算法
方法宣告在這裡
<CommonCrypto/CommonHMAC.h>
順序呼叫以下函式
CCHmacInit
CCHmacUpdate
CCHmacFinal
或者直接呼叫以下函式
CCHmac