zoukankan      html  css  js  c++  java
  • iOS base64 加密解密 通用类

     在使用过程中,直接将被类引入到项目中即可,不需要其它辅助类。

    使用示例:  将此通用类的头文件引入到目标类后,直接使用类名进行调用即可。

        NSString *str = [NSString stringWithFormat:@"YWE="];
        NSString *str1 = [NSString stringWithFormat:@"aa"];
        NSLog(@"resultStr========%@",[CommonFunc textFromBase64String:str]);   //使用类名进行调用
        NSLog(@"resultStr=========%@",[CommonFunc base64StringFromText:str1]);  //使用类名进行调用

    源码下载: 

    在项目中遇到字符串的base64编解码,分享一下工具类:

    CommonFunc.h

    //  
    //  CommonFunc.h  
    //  PRJ_base64  
    //  
    //  Created by wangzhipeng on 12-11-29.  
    //  Copyright (c) 2012年 com.comsoft. All rights reserved.  
    //  
      
    #import <Foundation/Foundation.h>  
      
    #define __BASE64( text )        [CommonFunc base64StringFromText:text]  
    #define __TEXT( base64 )        [CommonFunc textFromBase64String:base64]  
      
    @interface CommonFunc : NSObject  
      
    /****************************************************************************** 
     函数名称 : + (NSString *)base64StringFromText:(NSString *)text 
     函数描述 : 将文本转换为base64格式字符串 
     输入参数 : (NSString *)text    文本 
     输出参数 : N/A 
     返回参数 : (NSString *)    base64格式字符串 
     备注信息 : 
     ******************************************************************************/  
    + (NSString *)base64StringFromText:(NSString *)text;  
      
    /****************************************************************************** 
     函数名称 : + (NSString *)textFromBase64String:(NSString *)base64 
     函数描述 : 将base64格式字符串转换为文本 
     输入参数 : (NSString *)base64  base64格式字符串 
     输出参数 : N/A 
     返回参数 : (NSString *)    文本 
     备注信息 : 
     ******************************************************************************/  
    + (NSString *)textFromBase64String:(NSString *)base64;  
      
    @end 

    CommonFunc.m

    //  
    //  CommonFunc.m  
    //  PRJ_base64  
    //  
    //  Created by wangzhipeng on 12-11-29.  
    //  Copyright (c) 2012年 com.comsoft. All rights reserved.  
    //  
      
    #import "CommonFunc.h"  
      
    //引入IOS自带密码库  
    #import <CommonCrypto/CommonCryptor.h>  
      
    //空字符串  
    #define     LocalStr_None           @""  
      
    static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";  
      
    @implementation CommonFunc  
      
    + (NSString *)base64StringFromText:(NSString *)text  
    {  
        if (text && ![text isEqualToString:LocalStr_None]) {  
            //取项目的bundleIdentifier作为KEY  改动了此处
            //NSString *key = [[NSBundle mainBundle] bundleIdentifier];  
            NSData *data = [text dataUsingEncoding:NSUTF8StringEncoding];  
            //IOS 自带DES加密 Begin  改动了此处
            //data = [self DESEncrypt:data WithKey:key];  
            //IOS 自带DES加密 End  
            return [self base64EncodedStringFrom:data];  
        }  
        else {  
            return LocalStr_None;  
        }  
    }  
      
    + (NSString *)textFromBase64String:(NSString *)base64  
    {  
        if (base64 && ![base64 isEqualToString:LocalStr_None]) {  
            //取项目的bundleIdentifier作为KEY   改动了此处
            //NSString *key = [[NSBundle mainBundle] bundleIdentifier];  
            NSData *data = [self dataWithBase64EncodedString:base64];  
            //IOS 自带DES解密 Begin    改动了此处
            //data = [self DESDecrypt:data WithKey:key];    
            //IOS 自带DES加密 End  
            return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];  
        }  
        else {  
            return LocalStr_None;  
        }  
    }  
      
    /****************************************************************************** 
     函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key 
     函数描述 : 文本数据进行DES加密 
     输入参数 : (NSData *)data     
              (NSString *)key 
     输出参数 : N/A 
     返回参数 : (NSData *) 
     备注信息 : 此函数不可用于过长文本 
     ******************************************************************************/  
    + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key  
    {  
        char keyPtr[kCCKeySizeAES256+1];  
        bzero(keyPtr, sizeof(keyPtr));  
          
        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
          
        NSUInteger dataLength = [data length];  
          
        size_t bufferSize = dataLength + kCCBlockSizeAES128;  
        void *buffer = malloc(bufferSize);  
          
        size_t numBytesEncrypted = 0;  
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,  
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,  
                                              keyPtr, kCCBlockSizeDES,  
                                              NULL,  
                                              [data bytes], dataLength,  
                                              buffer, bufferSize,  
                                              &numBytesEncrypted);  
        if (cryptStatus == kCCSuccess) {  
            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];  
        }  
          
        free(buffer);  
        return nil;  
    }  
      
    /****************************************************************************** 
     函数名称 : + (NSData *)DESEncrypt:(NSData *)data WithKey:(NSString *)key 
     函数描述 : 文本数据进行DES解密 
     输入参数 : (NSData *)data 
              (NSString *)key 
     输出参数 : N/A 
     返回参数 : (NSData *) 
     备注信息 : 此函数不可用于过长文本 
     ******************************************************************************/  
    + (NSData *)DESDecrypt:(NSData *)data WithKey:(NSString *)key  
    {  
        char keyPtr[kCCKeySizeAES256+1];  
        bzero(keyPtr, sizeof(keyPtr));  
          
        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];  
          
        NSUInteger dataLength = [data length];  
          
        size_t bufferSize = dataLength + kCCBlockSizeAES128;  
        void *buffer = malloc(bufferSize);  
          
        size_t numBytesDecrypted = 0;  
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,  
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,  
                                              keyPtr, kCCBlockSizeDES,  
                                              NULL,  
                                              [data bytes], dataLength,  
                                              buffer, bufferSize,  
                                              &numBytesDecrypted);  
          
        if (cryptStatus == kCCSuccess) {  
            return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];  
        }  
          
        free(buffer);  
        return nil;  
    }  
      
    /****************************************************************************** 
     函数名称 : + (NSData *)dataWithBase64EncodedString:(NSString *)string 
     函数描述 : base64格式字符串转换为文本数据 
     输入参数 : (NSString *)string 
     输出参数 : N/A 
     返回参数 : (NSData *) 
     备注信息 : 
     ******************************************************************************/  
    + (NSData *)dataWithBase64EncodedString:(NSString *)string  
    {  
        if (string == nil)  
            [NSException raise:NSInvalidArgumentException format:nil];  
        if ([string length] == 0)  
            return [NSData data];  
          
        static char *decodingTable = NULL;  
        if (decodingTable == NULL)  
        {  
            decodingTable = malloc(256);  
            if (decodingTable == NULL)  
                return nil;  
            memset(decodingTable, CHAR_MAX, 256);  
            NSUInteger i;  
            for (i = 0; i < 64; i++)  
                decodingTable[(short)encodingTable[i]] = i;  
        }  
          
        const char *characters = [string cStringUsingEncoding:NSASCIIStringEncoding];  
        if (characters == NULL)     //  Not an ASCII string!  
            return nil;  
        char *bytes = malloc((([string length] + 3) / 4) * 3);  
        if (bytes == NULL)  
            return nil;  
        NSUInteger length = 0;  
          
        NSUInteger i = 0;  
        while (YES)  
        {  
            char buffer[4];  
            short bufferLength;  
            for (bufferLength = 0; bufferLength < 4; i++)  
            {  
                if (characters[i] == '\0')  
                    break;  
                if (isspace(characters[i]) || characters[i] == '=')  
                    continue;  
                buffer[bufferLength] = decodingTable[(short)characters[i]];  
                if (buffer[bufferLength++] == CHAR_MAX)      //  Illegal character!  
                {  
                    free(bytes);  
                    return nil;  
                }  
            }  
              
            if (bufferLength == 0)  
                break;  
            if (bufferLength == 1)      //  At least two characters are needed to produce one byte!  
            {  
                free(bytes);  
                return nil;  
            }  
              
            //  Decode the characters in the buffer to bytes.  
            bytes[length++] = (buffer[0] << 2) | (buffer[1] >> 4);  
            if (bufferLength > 2)  
                bytes[length++] = (buffer[1] << 4) | (buffer[2] >> 2);  
            if (bufferLength > 3)  
                bytes[length++] = (buffer[2] << 6) | buffer[3];  
        }  
          
        bytes = realloc(bytes, length);  
        return [NSData dataWithBytesNoCopy:bytes length:length];  
    }  
      
    /****************************************************************************** 
     函数名称 : + (NSString *)base64EncodedStringFrom:(NSData *)data 
     函数描述 : 文本数据转换为base64格式字符串 
     输入参数 : (NSData *)data 
     输出参数 : N/A 
     返回参数 : (NSString *) 
     备注信息 :  
     ******************************************************************************/  
    + (NSString *)base64EncodedStringFrom:(NSData *)data  
    {  
        if ([data length] == 0)  
            return @"";  
          
        char *characters = malloc((([data length] + 2) / 3) * 4);  
        if (characters == NULL)  
            return nil;  
        NSUInteger length = 0;  
          
        NSUInteger i = 0;  
        while (i < [data length])  
        {  
            char buffer[3] = {0,0,0};  
            short bufferLength = 0;  
            while (bufferLength < 3 && i < [data length])  
                buffer[bufferLength++] = ((char *)[data bytes])[i++];  
              
            //  Encode the bytes in the buffer to four characters, including padding "=" characters if necessary.  
            characters[length++] = encodingTable[(buffer[0] & 0xFC) >> 2];  
            characters[length++] = encodingTable[((buffer[0] & 0x03) << 4) | ((buffer[1] & 0xF0) >> 4)];  
            if (bufferLength > 1)  
                characters[length++] = encodingTable[((buffer[1] & 0x0F) << 2) | ((buffer[2] & 0xC0) >> 6)];  
            else characters[length++] = '=';  
            if (bufferLength > 2)  
                characters[length++] = encodingTable[buffer[2] & 0x3F];  
            else characters[length++] = '=';  
        }  
          
        return [[NSString alloc] initWithBytesNoCopy:characters length:length encoding:NSASCIIStringEncoding freeWhenDone:YES];  
    }  
      
    @end  

    转自: http://blog.csdn.net/shencaifeixia1/article/details/8530884

  • 相关阅读:
    使用Hibernate需要导入的一些JAR包
    Eclipse+MyEclipse+Tomcat的配置
    ant安装、环境变量配置及验证
    怎样关闭占用80端口的pid为4的进程
    查看80端口是否被占用
    python爬虫-抓取acg12动漫壁纸排行设置为桌面壁纸
    WPF--鼠标右键菜单中的Command命令实现
    WPF-TreeView获取文件夹目录、DataGrid获取目录下文件信息
    IOS学习[Swift中跳转与传值]
    IOS学习【xcode 7新特性url链接】
  • 原文地址:https://www.cnblogs.com/ygm900/p/3079278.html
Copyright © 2011-2022 走看看