美文网首页
iOS OC 常用加密算法封装记录

iOS OC 常用加密算法封装记录

作者: 叫我魏大川 | 来源:发表于2020-08-17 16:30 被阅读0次

    include <CommonCrypto/CommonDigest.h>

    //Base64加密
    +(NSString *)encodeBase64:(NSString *)input {
    NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    data = [GTMBase64 encodeData:data];
    NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"encodeBase64 == %@",base64String);
    return base64String;
    }

    //Base64编码
    +(NSString *)base64EncodeString:(NSString *)string {
    //1.先把字符串转换为二进制数据
    NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
    //2.对二进制数据进行base64编码,返回编码后的字符串
    //这是苹果已经给我们提供的方法
    NSString *str = [data base64EncodedStringWithOptions:0];
    return str;
    }

    //Base64解密
    +(NSString *)decodeBase64:(NSString *)input {
    NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    data = [GTMBase64 decodeData:data];
    NSString *base64String = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"decodeBase64 == %@",base64String);
    return base64String;
    }

    //对base64编码后的字符串进行解码
    +(NSString *)base64DecodeString:(NSString *)string {
    //1.将base64编码后的字符串『解码』为二进制数据
    //这是苹果已经给我们提供的方法
    NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];
    //2.把二进制数据转换为字符串返回
    NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    return str;
    }

    //Base64 字符串解码成 字符串
    +(NSString *)decodeBase64ToHexString:(NSString *)input {
    //1.将base64编码后的字符串『解码』为二进制数据
    //这是苹果已经给我们提供的方法
    NSData *myD = [[NSData alloc]initWithBase64EncodedString:input options:0];
    Byte *bytes = (Byte *)[myD bytes];
    //下面是Byte 转换为16进制。
    NSString *hexStr=@"";
    for(int i=0;i<[myD length];i++) {
    NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
    if([newHexStr length]==1)
    hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
    else
    hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
    }
    return hexStr;
    }

    //DES 加密
    +(NSData *)encryptUseDES:(NSData *)plainText key:(Byte *)key {
    NSData *textData = plainText;
    NSUInteger dataLength = [textData length];
    unsigned char buffer[1024];
    memset(buffer, 0, sizeof(char));
    size_t numBytesEncrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
    kCCOptionECBMode,
    key, kCCKeySizeDES,
    nil,
    [textData bytes], dataLength,
    buffer, 1024,
    &numBytesEncrypted);
    if (cryptStatus == kCCSuccess) {
    NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
    return data;
    }
    return nil;
    }

    //DES 解密
    +(NSData *)decrypUseDES:(NSData *)plainText key:(Byte *)key {
    NSData *cipherdata = plainText;
    unsigned char buffer[1024];
    memset(buffer, 0, sizeof(char));
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES,
    kCCOptionECBMode,
    key, kCCKeySizeDES,
    nil,
    [cipherdata bytes], [cipherdata length],
    buffer, 1024,
    &numBytesDecrypted);
    if(cryptStatus == kCCSuccess) {
    NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
    return plaindata;
    }
    return nil;
    }

    /MD5加密返回Nsdata
    +(NSData *)encodeMD5:(NSData *)input {
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input.bytes, (CC_LONG)input.length, result);
    NSData *data =[[NSData alloc] initWithBytes:result length:CC_MD5_DIGEST_LENGTH];
    return data;
    }

    如下,生成是小写的MD5的字符串,如果要生成大写的,只需要把
    [ret appendFormat:@"%02X",result[i]];中的 "%02X"的 X改成小写的 x即可。

    //MD5加密返回Nsstring
    +(NSString *)MD5HexDigest:(NSData *)input {
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input.bytes, (CC_LONG)input.length, result);
    NSMutableString ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH2];
    for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
    [ret appendFormat:@"%02X",result[i]];
    }
    return ret;
    }

    相关文章

      网友评论

          本文标题:iOS OC 常用加密算法封装记录

          本文链接:https://www.haomeiwen.com/subject/psdsrktx.html