博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS下的多种字符串加密方式
阅读量:7063 次
发布时间:2019-06-28

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

现在很多平台开放了api,提供各位开发者使用。一般的open api类似新浪那些,使用时候来个用户授权即可,但是有些平台提供的api,可能连用户授权界面都难以进入,因为这个要求md5加密appkey、time之类的,那个又要求sha1加密。

这里收集了一些加密的方法,利己利人。

 

//16位MD5加密方式- (NSString *)getMd5_16Bit_String:(NSString *)srcString{    //提取32位MD5散列的中间16位    NSString *md5_32Bit_String=[self getMd5_32Bit_String:srcString];    NSString *result = [[md5_32Bit_String substringToIndex:24] substringFromIndex:8];//即9~25位     return result;}//32位MD5加密方式- (NSString *)getMd5_32Bit_String:(NSString *)srcString{    const char *cStr = [srcString UTF8String];    unsigned char digest[CC_MD5_DIGEST_LENGTH];    CC_MD5( cStr, strlen(cStr), digest );    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)        [result appendFormat:@"%02x", digest[i]];        return result;}//sha1加密方式- (NSString *)getSha1String:(NSString *)srcString{    const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];    NSData *data = [NSData dataWithBytes:cstr length:srcString.length];        uint8_t digest[CC_SHA1_DIGEST_LENGTH];        CC_SHA1(data.bytes, data.length, digest);        NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];        for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {        [result appendFormat:@"%02x", digest[i]];    }        return result;}//sha256加密方式- (NSString *)getSha256String:(NSString *)srcString {    const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];    NSData *data = [NSData dataWithBytes:cstr length:srcString.length];        uint8_t digest[CC_SHA256_DIGEST_LENGTH];        CC_SHA1(data.bytes, data.length, digest);        NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];        for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {        [result appendFormat:@"%02x", digest[i]];    }        return result;}//sha384加密方式- (NSString *)getSha384String:(NSString *)srcString {    const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];    NSData *data = [NSData dataWithBytes:cstr length:srcString.length];        uint8_t digest[CC_SHA384_DIGEST_LENGTH];        CC_SHA1(data.bytes, data.length, digest);        NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];        for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++) {        [result appendFormat:@"%02x", digest[i]];    }        return result;}//sha512加密方式- (NSString*) getSha512String:(NSString*)srcString {    const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];    NSData *data = [NSData dataWithBytes:cstr length:srcString.length];    uint8_t digest[CC_SHA512_DIGEST_LENGTH];        CC_SHA512(data.bytes, data.length, digest);        NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];    for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)        [result appendFormat:@"%02x", digest[i]];    return result;}

 

不过记得在头文件添加一句

#import <CommonCrypto/CommonDigest.h> 

 

另外,有些api它接收的上传数据,可能是需要base64编码的~~在这里也附上之前做的一个项目中的代码片段

#import "NSData+Helper.h"static const char encodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";@implementation NSData (Helper)+ (NSData *) dataWithBase64EncodedString: (NSString *)string {    // Create a memory buffer containing Base64 encoded string data    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];    }        realloc(bytes, length);    return [NSData dataWithBytesNoCopy:bytes length:length];}- (NSString *)base64Encoding;{    if ([self length] == 0)        return @"";        char *characters = malloc((([self length] + 2) / 3) * 4);    if (characters == NULL)        return nil;    NSUInteger length = 0;        NSUInteger i = 0;    while (i < [self length])    {        char buffer[3] = {
0,0,0}; short bufferLength = 0; while (bufferLength < 3 && i < [self length]) buffer[bufferLength++] = ((char *)[self 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

 

 

转载于:https://www.cnblogs.com/nathanou/p/3272871.html

你可能感兴趣的文章
CSDN博客大事日记1
查看>>
JavaScript秘密花园 - Type Casting,undefined,eval,setTimeout,Auto Semicolon Insertion
查看>>
你不知道的JavaScript(二)数组
查看>>
[转载] Linux多线程与同步
查看>>
049.两个小练习
查看>>
PHP获取今天、昨天、明天的日期
查看>>
C#综合揭秘——细说多线程(上)
查看>>
UVA1185 Big Number
查看>>
04-09,Work-账户登录,三次拉黑
查看>>
Cocos2d-x 3.2:UI树
查看>>
android broadcastreceiver
查看>>
[转] 关于幂律分布的一个笔记
查看>>
Python import 指定目录中的模块
查看>>
7种方法来创业
查看>>
前端面试技巧与技术栈准备梳理
查看>>
Controller
查看>>
1031 Hungar的得分问题(二)
查看>>
软件工程 第一个小例子
查看>>
X86 Booting Sequence
查看>>
python中xrange和range的异同
查看>>