美文网首页
IOS使用Openssl aes256加密

IOS使用Openssl aes256加密

作者: 海的原滋味 | 来源:发表于2017-12-02 11:23 被阅读29次
    - (NSString *)AES256Encrypt:(NSString *)dataString WithKey:(NSString *)key iv:(NSString *)iv {
        
        NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
        NSData *dataToEncrypt = [dataString dataUsingEncoding:NSUTF8StringEncoding];
        NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
        
        NSUInteger dataLength = [dataToEncrypt length];
        
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
                                              keyData.bytes, kCCKeySizeAES256,
                                              ivData.bytes, // initialisation vector
                                              dataToEncrypt.bytes,
                                              dataToEncrypt.length, /* input */
                                              buffer, bufferSize, /* output */
                                              &numBytesEncrypted);
        if (cryptStatus == kCCSuccess) {
            //the returned NSData takes ownership of the buffer and will free it on deallocation
            NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
            return [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding];
        }
        
        free(buffer); //free the buffer;
        return nil;
    }
    - (NSString *)AES256Decrypt:(NSString *)originString WithKey:(NSString *)key iv:(NSString *)iv {
        NSData *originData = [originString dataUsingEncoding:NSUTF8StringEncoding];
        NSData *cipherData = [GTMBase64 decodeData:originData];
        
        NSData *keydata = [key dataUsingEncoding:NSUTF8StringEncoding];
        NSData *dataToEncrypt = cipherData;
        NSUInteger dataLength = [dataToEncrypt length];
        size_t bufferSize = dataLength + kCCBlockSizeAES128;
        void *buffer = malloc(bufferSize);
        size_t numBytesDecrypted = 0;
        NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                              kCCAlgorithmAES128,
                                              kCCOptionPKCS7Padding,
                                              keydata.bytes,
                                              kCCKeySizeAES256,
                                              ivData.bytes,
                                              [dataToEncrypt bytes],
                                              [dataToEncrypt length],
                                              buffer,
                                              1024,
                                              &numBytesDecrypted);
        if (cryptStatus == kCCSuccess) {
            NSData *data = [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
            return [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        }
        free(buffer); //free the buffer;
        return nil;
    }
    

    相关文章

      网友评论

          本文标题:IOS使用Openssl aes256加密

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