日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS 加密的3种方法

發布時間:2025/6/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS 加密的3种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//需要導入 ??#import?<CommonCrypto/CommonCryptor.h>?

==============MD5加密============?

NSString?*str =?@"加密的內容";?

? ? ? ??//轉換成C語言的字符串?

? ? ? ??const?char?*cStr=[str?UTF8String];?

? ? ? ??//MD5加密的結果是128位,需要開辟一個16字節的空間?

? ? ? ??unsigned?char?result[16];?

? ? ? ??//調用加密函數?

? ? ? ??CC_MD5(cStr, (unsigned?int)strlen(cStr), result);?

? ? ? ??//通過上面這個方法獲取的MD5是一個16個字符的數組,需要轉換成32位的MD5值?

? ? ? ??NSMutableString?*string = [NSMutableString?stringWithCapacity:10];?

? ? ? ??for?(int?i=; i<16; i++) {?

? ? ? ? ? ? [string?appendString:[NSString?stringWithFormat:@"%02x",result[i]]];?

? ? ? ? }?

? ? ? ??NSLog(@"MD5加密:%@",string);?

?

===============base64加密解密=============?

//ios7?以后提供了base64的轉碼方式?

? ? ? ??//加密?

? ? ? ??NSString?*pass=@"加密的內容";?

? ? ? ??NSData?*passData=[pass?dataUsingEncoding:NSUTF8StringEncoding];?

? ? ? ??NSString?*result = [passData?base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];?

? ? ? ??NSLog(@"base64加密:%@",result);?

?? ? ? ??

? ? ? ??//解密?

? ? ? ??NSData?*decodeData = [[NSData?alloc]initWithBase64EncodedString:result?options:];?

? ? ? ??NSString?*decodeStr = [[NSString?alloc]initWithData:decodeData?encoding:NSUTF8StringEncoding];?

? ? ? ??NSLog(@"base64解密:%@",decodeStr);?

?

================AES加密解密===============?

//新建一個NSData類,寫入一下兩個方法?

//加密方法?

- (NSData*)AES256EncryptWithKey:(NSString*)key {?

?? ??

? ??char?keyPtr[kCCKeySizeAES256?+?1];?// room for terminator (unused)?

? ??bzero(keyPtr,?sizeof(keyPtr));?// fill with zeroes (for padding)?

?? ??

? ? [key?getCString:keyPtr?maxLength:sizeof(keyPtr)?encoding:NSUTF8StringEncoding];?

?? ??

? ??NSUInteger?dataLength = [self?length];?

?? ??

? ??size_t?bufferSize ? ? ? ? ? = dataLength +?kCCBlockSizeAES128;?

? ??void* buffer? ? ? ? ? ? ? ? =?malloc(bufferSize);?

?? ??

? ??size_t?numBytesEncrypted? ? =?;?

? ??CCCryptorStatus?cryptStatus =?CCCrypt(kCCEncrypt,?kCCAlgorithmAES128,?kCCOptionPKCS7Padding,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? keyPtr,?kCCKeySizeAES256,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??NULL?/* initialization vector (optional) */,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self?bytes], dataLength,?/* input */?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer, bufferSize,?/* output */?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &numBytesEncrypted);?

?? ??

? ??if?(cryptStatus ==?kCCSuccess) {?

? ? ? ??return?[NSData?dataWithBytesNoCopy:buffer?length:numBytesEncrypted];?

? ? }?

?? ??

? ??free(buffer);?

? ??return?nil;?

}?

//解密方法?

- (NSData*)AES256DecryptWithKey:(NSString*)key {?

?? ??

? ??char?keyPtr[kCCKeySizeAES256?+?1];?// room for terminator (unused)?

? ??bzero(keyPtr,?sizeof(keyPtr));?// fill with zeroes (for padding)?

?? ??

? ??// fetch key data?

? ? [key?getCString:keyPtr?maxLength:sizeof(keyPtr)?encoding:NSUTF8StringEncoding];?

?? ??

? ??NSUInteger?dataLength = [self?length];?

?? ??

? ??size_t?bufferSize ? ? ? ? ? = dataLength +?kCCBlockSizeAES128;?

? ??void* buffer? ? ? ? ? ? ? ? =?malloc(bufferSize);?

?? ??

? ??size_t?numBytesDecrypted? ? =?;?

? ??CCCryptorStatus?cryptStatus =?CCCrypt(kCCDecrypt,?kCCAlgorithmAES128,?kCCOptionPKCS7Padding,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? keyPtr,?kCCKeySizeAES256,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??NULL?/* initialization vector (optional) */,?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [self?bytes], dataLength,?/* input */?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer, bufferSize,?/* output */?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &numBytesDecrypted);?

?? ??

? ??if?(cryptStatus ==?kCCSuccess) {?

? ? ? ??return?[NSData?dataWithBytesNoCopy:buffer?length:numBytesDecrypted];?

? ? }?

?? ??

? ??free(buffer);?//free the buffer;?

?

在另外的類里面調用上面NSData里面的方法?

//==========AES加密解密=============?

? ? ? ??NSString?*key =?@"mykey";//鑰匙?

? ? ? ??NSString?*secret =?@"加密內容";//準備加密的內容?

? ? ? ??NSData?*plain = [secret?dataUsingEncoding:NSUTF8StringEncoding];?

? ? ? ??NSData?*ciper = [plain?AES256EncryptWithKey:key];?

? ? ? ??NSLog(@"AES加密%@",ciper);?

? ? ? ??//解密?

? ? ? ? plain = [ciper?AES256DecryptWithKey:key];?

?? ? ? ??NSLog(@"AES解密:%@",[[NSString?alloc]initWithData:plain?encoding:NSUTF8StringEncoding]);

轉載于:https://www.cnblogs.com/wanghuaijun/p/5222600.html

總結

以上是生活随笔為你收集整理的iOS 加密的3种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。