zoukankan      html  css  js  c++  java
  • 转:加密(ios)

    1、MD5   
    //因为是使用category,所以木有参数传入啦

    -(NSString *) stringFromMD5 {
        if(self == nil || [self length] == 0) {
            return nil;
        }
        const char *value = [self UTF8String];
        unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
        CC_MD5(value, strlen(value), outputBuffer);
        NSMutableString *outputString = [[NSMutableString allocinitWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
            [outputString appendFormat:@"%02x",outputBuffer[count]];
        }
        return [outputString autorelease];
    }


    2、Base64

    + (NSString *) base64EncodeData: (NSData *) objData {
    const unsigned char * objRawData = [objData bytes];
    char * objPointer;
    char * strResult;

    // Get the Raw Data length and ensure we actually have data
    int intLength = [objData length];
    if (intLength == 0return nil;

    // Setup the String-based Result placeholder and pointer within that placeholder
    strResult = (char *)calloc(((intLength + 2) / 3) * 4sizeof(char));
    objPointer = strResult;

    // Iterate through everything
    while (intLength > 2) { // keep going until we have less than 24 bits
    *objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
    *objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
    *objPointer++ = _base64EncodingTable[((objRawData[1] & 0x0f) << 2) + (objRawData[2] >> 6)];
    *objPointer++ = _base64EncodingTable[objRawData[2] & 0x3f];

    // we just handled 3 octets (24 bits) of data
    objRawData += 3;
    intLength -= 3;
    }

    // now deal with the tail end of things
    if (intLength != 0) {
    *objPointer++ = _base64EncodingTable[objRawData[0] >> 2];
    if (intLength > 1) {
    *objPointer++ = _base64EncodingTable[((objRawData[0] & 0x03) << 4) + (objRawData[1] >> 4)];
    *objPointer++ = _base64EncodingTable[(objRawData[1] & 0x0f) << 2];
    *objPointer++ = '=';
    else {
    *objPointer++ = _base64EncodingTable[(objRawData[0] & 0x03) << 4];
    *objPointer++ = '=';
    *objPointer++ = '=';
    }
    }

    // Terminate the string-based result
    *objPointer = '';

        NSString *rstStr = [NSString stringWithCString:strResult encoding:NSASCIIStringEncoding];
        free(objPointer);
        return rstStr;
    }




    3、AES
    -(NSData*) EncryptAES: (NSString *) key {
        char keyPtr[kCCKeySizeAES256+1];
        bzero(keyPtr, sizeof(keyPtr));

        [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];

        NSUInteger dataLength = [self length];

        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);

        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncryptkCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding | kCCOptionECBMode,
                                              keyPtr, kCCBlockSizeAES128,
                                              NULL,
                                              [self bytes], dataLength,
                                              buffer, bufferSize,
                                              &numBytesEncrypted);
        if (cryptStatus == kCCSuccess) {
            return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
        }

        free(buffer);
        return nil;
    }


    4、RSA

    - (NSData *) encryptWithData:(NSData *)content {
        size_t plainLen = [content length];
        if (plainLen > maxPlainLen) {
            NSLog(@"content(%ld) is too long, must < %ld", plainLen, maxPlainLen);
            return nil;
        }

        void *plain = malloc(plainLen);
        [content getBytes:plain
                   length:plainLen];

        size_t cipherLen = 128// currently RSA key length is set to 128 bytes
        void *cipher = malloc(cipherLen);

        OSStatus returnCode = SecKeyEncrypt(publicKeykSecPaddingPKCS1, plain,
                                            plainLen, cipher, &cipherLen);

        NSData *result = nil;
        if (returnCode != 0) {
            NSLog(@"SecKeyEncrypt fail. Error Code: %ld", returnCode);
        }
        else {
            result = [NSData dataWithBytes:cipher
                                    length:cipherLen];
        }

        free(plain);
        free(cipher);

        return result;
    }
  • 相关阅读:
    查看kafka在zookeeper中节点信息和查看方式
    安装单机版redis
    一 Redis 简介 和存储
    Spark消费kafka的直连方式
    Streaming 累加器和广播变量 和sql
    sparkStreaming转换算子02
    DStreams输入 从kafka消费数据 直连
    关于上下文图
    2018年春季个人阅读计划
    问题账户需求分析
  • 原文地址:https://www.cnblogs.com/li-baibo/p/3319766.html
Copyright © 2011-2022 走看看