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

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

hot3.png

 

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

        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    = 0;

    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    = 0;

    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://my.oschina.net/u/2287505/blog/597837

你可能感兴趣的文章
博科300交换机不中断(non-disruptive)固件升级
查看>>
盘点微信中被隐藏的实用功能
查看>>
tcpdump抓包工具
查看>>
红帽7之hostnamectl 实用小命令用法
查看>>
配置防盗链、访问控制Directory、FiliesMatch
查看>>
Swarm基于多主机容器网络-overlay networks 梳理
查看>>
Linux LVM之VG
查看>>
chkconfig命令学习
查看>>
lvs负载均衡realserver windows配置
查看>>
kettle 使用
查看>>
沫沫金:BootStarp轮播组件(carousel)支持触屏【Hammer】
查看>>
OpenStack入门修炼之网络虚拟化基础(20)
查看>>
Centos7系列(八)ISCSI网络存储服务
查看>>
支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示
查看>>
PHP带头大哥谈学习OO的一点体会!
查看>>
Golang之面向对象
查看>>
android布局页面中引入另一个布局页面
查看>>
rsync工具介绍、rsync常用选项、rsync通过ssh同步
查看>>
php-fpm慢执行日志
查看>>
jquery的一次点击实现
查看>>