iOS开发笔记(3)---- 3DES/MD5加解密

来源:互联网 发布:网页编辑软件下载 编辑:程序博客网 时间:2024/06/19 04:38

对称加密需要注意的是:解密是加密的逆过程,逆过程,逆过程!如果解不出来一定要从头到尾一点点检查,一定可以找到原因的。

准备工作:导入系统头文件
#import “CommonCryptor.h”
#import “CommonDigest.h”

加密代码如下

    //将秘钥字符串转换为Byte数组    NSData *kd=[keyStr dataUsingEncoding:NSUTF8StringEncoding];    const void *key=kd.bytes;    //将明文字符串转换为Byte数组    NSData *dt=[plainText dataUsingEncoding:NSUTF8StringEncoding];    const void *data=dt.bytes;    int dataLength = (int)dt.length;    int diff = 8 - (dataLength % 8);    int newSize = 0;    if(diff > 0)        newSize = dataLength + diff;    char dataPtr[newSize];    memcpy(dataPtr, data, dataLength);    for(int i = 0; i < diff; i++){        dataPtr[i + dataLength] = 0x00;    }    void *buffer;    buffer = malloc( newSize * sizeof(uint8_t));    memset(buffer, 0x0, newSize);      memcpy(buffer, data, dataLength);          void *k;    k=malloc(24*sizeof(uint8_t));    memcpy(k, key, 24);    size_t movedBytes = 0;    //执行加密    CCCrypt(kCCEncrypt,kCCAlgorithm3DES,   kCCOptionECBMode|kCCOptionPKCSNoPadding,                                       k,                                       kCCKeySize3DES,                                       nil,                                       dataPtr,                                       newSize,                                       buffer,                                       newSize,                                       &movedBytes);    NSData *myData = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)movedBytes];    //加密完成的Byte数组不能直接转换成字符串,需要进行Base64或转成16进制    NSString *ret=[IPNGTMBase64 encodeBase64Data:myData];    return ret;

解密为加密的逆过程,代码如下:

    //将秘钥字符串转换为Byte数组    NSData *kd=[keyStr dataUsingEncoding:NSUTF8StringEncoding];    const void *key=kd.bytes;    //将密文字符串转换为Byte数组(Base64解码或16进制转二进制)    NSData *dt=[IPNGTMBase64 decodeString:plainText];    const void *data=dt.bytes;    long dataLength = dt.length;    void *buffer;    buffer = malloc( dataLength * sizeof(uint8_t));    memcpy(buffer, data, dataLength);      //复制    void *k;    k=malloc(24*sizeof(uint8_t));    memcpy(k, key, 24);    size_t movedBytes = 0;    //执行解码    CCCrypt(kCCDecrypt,      kCCAlgorithm3DES,kCCOptionECBMode|kCCOptionPKCSNoPadding,                                       k,                                       kCCKeySize3DES,                                       nil,                                       data,                                       dataLength,                                       buffer,                                       dataLength,                                       &movedBytes);    NSData *myData = [NSData dataWithBytes:(const void *)buffer length:(NSUInteger)movedBytes];    //解密出来就是明文字符串的Byte数组了,可以直接转换成字符串    NSString *ret=[[NSString alloc]initWithData:myData encoding:NSUTF8StringEncoding];

MD5加密过程不可逆,一般用来做签名,代码如下

    const char *cStr = [inPutText UTF8String];    unsigned char digest[16];    CC_MD5( cStr,(CC_LONG)strlen(cStr), digest );    NSData * base64 = [[NSData alloc]initWithBytes:digest length:16];    MD5加密得到的Byte数组不能直接转换为字符串,也需要做Base64或16进制转换    //NSString *ret= [IPNGTMBase64 encodeBase64Data:base64];    NSString *ret= [IPNDESUtil hexStringFromString:base64];

所有源码如下:http://download.csdn.net/detail/l964968324/8859205
多多支持~~

0 0
原创粉丝点击