zoukankan      html  css  js  c++  java
  • 常见加密算法

    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 alloc] initWithCapacity: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 == 0) return nil;
    
    // Setup the String-based Result placeholder and pointer within that placeholder
    strResult = (char *)calloc(((intLength + 2) / 3) * 4, sizeof(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(kCCEncrypt, kCCAlgorithmAES128,
                                              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(publicKey, kSecPaddingPKCS1, 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;
    }
    
     
    
  • 相关阅读:
    ZUCC2129 The Tree of Power(树形DP)
    ZUCC Flower Name(01字典树)
    JDBC 测试01
    CF1355E Restorer Distance(三分)
    CF1352E Special Permutation(桶排序+前缀和)
    CF1350E Orac and Game of Life(BFS)
    CF1350D Orac and Medians(找规律)
    Python机器学习(五十七)SciPy 积分
    Python机器学习(五十六)SciPy fftpack(傅里叶变换)
    Python机器学习(五十五)SciPy 常量
  • 原文地址:https://www.cnblogs.com/keyan1102/p/4513538.html
Copyright © 2011-2022 走看看