博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS 加密的3种方法
阅读量:5944 次
发布时间:2019-06-19

本文共 3109 字,大约阅读时间需要 10 分钟。

//需要导入   #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]);

转载地址:http://xywxx.baihongyu.com/

你可能感兴趣的文章
(转)swc与swf的区别
查看>>
javascript-Array类型 二
查看>>
Jie Bao 牛人cv
查看>>
海量数据处理的 Top K算法(问题) 小顶堆实现
查看>>
HTC 通过 WifiConfiguration 修改 SSID
查看>>
substring
查看>>
Java抽象类和接口的区别(好长时间没看这种文章了)
查看>>
markdown语法
查看>>
oracle11g dataguard 完全手册
查看>>
关系模式数据库设计范式深入浅出
查看>>
打油诗 现代教育经济学
查看>>
隐马尔科夫模型(Hidden Markov Models) 系列之二
查看>>
OpenXml操作Word的一些操作总结.无word组件生成word.
查看>>
WPF模板
查看>>
java.lang.ClassCastException: sun.proxy.$Proxy11 cannot be cast to分析
查看>>
加载ConversationListActivity以及延迟的使用
查看>>
Extjs4.2 Grid搜索Ext.ux.grid.feature.Searching的使用
查看>>
GTK、KDE、Gnome、XWindows 图形界面
查看>>
hdu1231-最大连续子序列
查看>>
TMG阵列部署选择
查看>>