關於iOS開發中使用到的AES加密和SHA256加密的使用

來源:互聯網
上載者:User

** 關於iOS開發中使用到的AES加密和SHA256加密的使用

**
筆者在前段時間就這個問題跟背景人對接了很久,最後終於確定問題是我們的加密方式雖然都為同一種,但卻存在本質的區別。下面我簡單描述下區別,並附上主要代碼:
1. 常用AES加密說明
我們在開發中常用的AES為AES128和AES256,兩者的區別在於256補碼方式更加安全一點,按照一個位元組為八位,採用的加密keyAES128為128/8=16位,AES256為256/8=32位,說到這裡,需要注意一個參數:kCCOptionPKCS7Padding,這裡java那裡有多少種筆者沒研究過,但是知道有另外一個叫:kCCOptionPKCS5Padding,但是iOS只有一種,也就是上面的所說的kCCOptionPKCS7Padding,那這怎麼辦呢。這裡說下加密的key,這個參數跟加密key有關,上面有提到,AES128為16位加密key,AES256為32位加密key,正常來說,只要key滿足這個要求,不管你用kCCOptionPKCS7Padding還是kCCOptionPKCS5Padding都是沒區別的,但是當key少於這個數的時候,就需要進行補碼了,這樣區別就出來了,kCCOptionPKCS7Padding是缺幾位,就補幾個幾,如:缺3位,補3個3,缺5位,補5個5,kCCOptionPKCS5Padding是缺幾位就補幾個0,如:缺3位,就補3個0.在使用中還有一個參數可以設定,iv向量,這個都是要自己設定的,也可不做設定,感興趣的朋友可以自己去瞭解下iv向量,這裡不做過多說明。
下面附上AES256和AES128加密程式碼片段供參考:

 - (NSData *)aes256_encrypt:(NSString *)key   //加密{    char keyPtr[kCCKeySizeAES256+1];    bzero(keyPtr, sizeof(keyPtr));    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];    NSUInteger dataLength = [self length];    size_t bufferSize = dataLength + kCCBlockSizeAES128;    void *buffer = malloc(bufferSize);    size_t numBytesEncrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128,                                          kCCOptionPKCS7Padding | kCCOptionECBMode,                                          keyPtr, kCCBlockSizeAES128,                                          NULL,                                          [self bytes], dataLength,                                          buffer, bufferSize,                                          &numBytesEncrypted);    if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];    }    free(buffer);    return nil;}
- (NSData *)AES128EncryptWithKey:(NSString *)key {//加密    char keyPtr[kCCKeySizeAES128+1];    bzero(keyPtr, sizeof(keyPtr));    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];    char ivPtr[kCCKeySizeAES128+1];    memset(ivPtr, 0, sizeof(ivPtr));    [gIv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];    NSUInteger dataLength = [self length];    size_t bufferSize = dataLength + kCCBlockSizeAES128;    void *buffer = malloc(bufferSize);    size_t numBytesEncrypted = 0;    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,                                          kCCAlgorithmAES128,                                          kCCOptionPKCS7Padding,                                          keyPtr,                                          kCCBlockSizeAES128,                                          ivPtr,                                          [self bytes],                                          dataLength,                                          buffer,                                          bufferSize,                                          &numBytesEncrypted);    if (cryptStatus == kCCSuccess) {        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];    }    free(buffer);    return nil;}

可以看到AES128有個iv向量,可手動設定。

2.下面來說下SHA256加密,這個相對於AES加密就簡單很多了,百度上也有很多,但是筆者在使用的時候,從網上複製的代碼,被坑的不輕,分明是SHA256,結果成了SHA的其他加密結果,看了下代碼才知道原來網上的寫錯了,這裡僅附上SHA256的代碼,不多作說明。

//sha256加密方式- (NSString *)getSha256String:(NSString *)srcString {    const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];    NSData *data = [NSData dataWithBytes:cstr length:srcString.length];    uint8_t digest[CC_SHA256_DIGEST_LENGTH];    CC_SHA256(data.bytes, data.length, digest);    NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {        [result appendFormat:@"%02x", digest[i]];    }    return result;}

從上述代碼可以看到裡面有256字樣,至於SHA的其他加密方式則是直接把參數替換為對應的數字就行了,有興趣的朋友可以在使用中自己試試。
第一次發部落格,有寫的不好的,還請見諒。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.