• iOS之加密的三种方法


      1 //需要导入   #import <CommonCrypto/CommonCryptor.h> 
      2 
      3 ==============MD5加密============ 
      4 
      5 NSString *str = @"加密的内容"; 
      6 
      7         //转换成C语言的字符串 
      8 
      9         const char *cStr=[str UTF8String]; 
     10 
     11         //MD5加密的结果是128位,需要开辟一个16字节的空间 
     12 
     13         unsigned char result[16]; 
     14 
     15         //调用加密函数 
     16 
     17         CC_MD5(cStr, (unsigned int)strlen(cStr), result); 
     18 
     19         //通过上面这个方法获取的MD5是一个16个字符的数组,需要转换成32位的MD5值 
     20 
     21         NSMutableString *string = [NSMutableString stringWithCapacity:10]; 
     22 
     23         for (int i=; i<16; i++) { 
     24 
     25             [string appendString:[NSString stringWithFormat:@"%02x",result[i]]]; 
     26 
     27         } 
     28 
     29         NSLog(@"MD5加密:%@",string); 
     30 
     31  
     32 
     33 ===============base64加密解密============= 
     34 
     35 //ios7 以后提供了base64的转码方式 
     36 
     37         //加密 
     38 
     39         NSString *pass=@"加密的内容"; 
     40 
     41         NSData *passData=[pass dataUsingEncoding:NSUTF8StringEncoding]; 
     42 
     43         NSString *result = [passData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
     44 
     45         NSLog(@"base64加密:%@",result); 
     46 
     47          
     48 
     49         //解密 
     50 
     51         NSData *decodeData = [[NSData alloc]initWithBase64EncodedString:result options:]; 
     52 
     53         NSString *decodeStr = [[NSString alloc]initWithData:decodeData encoding:NSUTF8StringEncoding]; 
     54 
     55         NSLog(@"base64解密:%@",decodeStr); 
     56 
     57  
     58 
     59 ================AES加密解密=============== 
     60 
     61 //新建一个NSData类,写入一下两个方法 
     62 
     63 //加密方法 
     64 
     65 - (NSData*)AES256EncryptWithKey:(NSString*)key { 
     66 
     67      
     68 
     69     char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused) 
     70 
     71     bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 
     72 
     73      
     74 
     75     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 
     76 
     77      
     78 
     79     NSUInteger dataLength = [self length]; 
     80 
     81      
     82 
     83     size_t bufferSize           = dataLength + kCCBlockSizeAES128; 
     84 
     85     void* buffer                = malloc(bufferSize); 
     86 
     87      
     88 
     89     size_t numBytesEncrypted    = ; 
     90 
     91     CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
     92 
     93                                           keyPtr, kCCKeySizeAES256, 
     94 
     95                                           NULL /* initialization vector (optional) */, 
     96 
     97                                           [self bytes], dataLength, /* input */ 
     98 
     99                                           buffer, bufferSize, /* output */ 
    100 
    101                                           &numBytesEncrypted); 
    102 
    103      
    104 
    105     if (cryptStatus == kCCSuccess) { 
    106 
    107         return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; 
    108 
    109     } 
    110 
    111      
    112 
    113     free(buffer); 
    114 
    115     return nil; 
    116 
    117 } 
    118 
    119 //解密方法 
    120 
    121 - (NSData*)AES256DecryptWithKey:(NSString*)key { 
    122 
    123      
    124 
    125     char keyPtr[kCCKeySizeAES256 + 1]; // room for terminator (unused) 
    126 
    127     bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding) 
    128 
    129      
    130 
    131     // fetch key data 
    132 
    133     [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding]; 
    134 
    135      
    136 
    137     NSUInteger dataLength = [self length]; 
    138 
    139      
    140 
    141     size_t bufferSize           = dataLength + kCCBlockSizeAES128; 
    142 
    143     void* buffer                = malloc(bufferSize); 
    144 
    145      
    146 
    147     size_t numBytesDecrypted    = ; 
    148 
    149     CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, 
    150 
    151                                           keyPtr, kCCKeySizeAES256, 
    152 
    153                                           NULL /* initialization vector (optional) */, 
    154 
    155                                           [self bytes], dataLength, /* input */ 
    156 
    157                                           buffer, bufferSize, /* output */ 
    158 
    159                                           &numBytesDecrypted); 
    160 
    161      
    162 
    163     if (cryptStatus == kCCSuccess) { 
    164 
    165         return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; 
    166 
    167     } 
    168 
    169      
    170 
    171     free(buffer); //free the buffer; 
    172 
    173  
    174 
    175 在另外的类里面调用上面NSData里面的方法 
    176 
    177 //==========AES加密解密============= 
    178 
    179         NSString *key = @"mykey";//钥匙 
    180 
    181         NSString *secret = @"加密内容";//准备加密的内容 
    182 
    183         NSData *plain = [secret dataUsingEncoding:NSUTF8StringEncoding]; 
    184 
    185         NSData *ciper = [plain AES256EncryptWithKey:key]; 
    186 
    187         NSLog(@"AES加密%@",ciper); 
    188 
    189         //解密 
    190 
    191         plain = [ciper AES256DecryptWithKey:key]; 
    192 
    193          NSLog(@"AES解密:%@",[[NSString alloc]initWithData:plain encoding:NSUTF8StringEncoding]);
  • 相关阅读:
    接口和抽象类的异同点
    实体对象间传值克隆
    什么是反射&反射的8个类的用法
    ERP中反射的两个实例
    基础02 Java 跨平台原理
    基础01 dos命令
    lists删除
    多字段 java对象排序
    Java对象排序
    MySQL表中数据的迁移
  • 原文地址:https://www.cnblogs.com/rglmuselily/p/5262134.html
Copyright © 2020-2023  润新知