zoukankan      html  css  js  c++  java
  • EncryptTool

    EncryptTool.h

    //
    //  Des.h
    //  HungryBear
    //
    //  Created by Bruce Yang on 12-5-26.
    //  Copyright (c) 2012年 EricGameStudio. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <CommonCrypto/CommonCryptor.h>
    #import "GTMBase64.h"
    
    @interface EncryptTool : NSObject {
        
    }
    
    +(EncryptTool*) et;
    
    +(NSString*) parseByte2HexString:(Byte*)bytes;
    
    +(NSString*) parseByteArray2HexString:(Byte[])bytes;
    
    -(id) init;
    
    -(NSString*) encryptUseDES:(NSString*)plainText key:(NSString*)key;
    
    -(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key;
    
    @end

    EncryptTool.mm

    //
    //  Des.mm
    //  HungryBear
    //
    //  Created by Bruce Yang on 12-5-26.
    //  Copyright (c) 2012年 EricGameStudio. All rights reserved.
    //
    
    #import "EncryptTool.h"
    
    @implementation EncryptTool
    
    static Byte _iv_[] = {1, 2, 3, 4, 5, 6, 7, 8};
    
    +(EncryptTool*) et {
        return [[[self alloc] init] autorelease];
    }
    
    +(NSString*) parseByte2HexString:(Byte*) bytes {
        NSMutableString *hexStr = [[NSMutableString alloc]init];
        int i = 0;
        if(bytes) {
            while (bytes[i] != '\0') {
                NSString *hexByte = [NSString stringWithFormat:@"%x",bytes[i] & 0xff];///16进制数
                if([hexByte length]==1) {
                    [hexStr appendFormat:@"0%@", hexByte];
                } else {
                    [hexStr appendFormat:@"%@", hexByte];
                }
                i ++;
            }
        }
        NSLog(@"bytes 的16进制数为:%@",hexStr);
        return hexStr;
    }
    
    
    +(NSString*) parseByteArray2HexString:(Byte[]) bytes {
        NSMutableString *hexStr = [[NSMutableString alloc]init];
        int i = 0;
        if(bytes) {
            while (bytes[i] != '\0') {
                NSString *hexByte = [NSString stringWithFormat:@"%x",bytes[i] & 0xff];///16进制数
                if([hexByte length]==1) {
                    [hexStr appendFormat:@"0%@", hexByte];
                } else {
                    [hexStr appendFormat:@"%@", hexByte];
                }
                i ++;
            }
        }
        NSLog(@"bytes 的16进制数为:%@",hexStr);
        return hexStr;
    }
    
    
    -(id) init {
        if((self = [super init])) {
            
        }
        return self;
    }
    
    
    -(NSString*) encryptUseDES:(NSString*)plainText key:(NSString*)key {
        const char* textBytes = [plainText UTF8String];
        NSUInteger dataLength = [plainText length];
        unsigned char buffer[1024];
        memset(buffer, 0, sizeof(char));
        size_t numBytesEncrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, 
                                              kCCAlgorithmDES, 
                                              kCCOptionPKCS7Padding, 
                                              [key UTF8String], 
                                              kCCKeySizeDES, 
                                              _iv_, 
                                              textBytes, 
                                              dataLength, 
                                              buffer, 
                                              1024, 
                                              &numBytesEncrypted);
        
        NSString* cipherText = nil;
        if (cryptStatus == kCCSuccess) {
            NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
            cipherText = [GTMBase64 stringByEncodingData:data];
        }
        return cipherText;
    }
    
    
    -(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key {
        NSData* cipherData = [GTMBase64 decodeString:cipherText];
        
        // 8kB~
        unsigned char buffer[8196];
        memset(buffer, 0, sizeof(char));
        size_t numBytesDecrypted = 0;
        CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, 
                                              kCCAlgorithmDES, 
                                              kCCOptionPKCS7Padding, 
                                              [key UTF8String], 
                                              kCCKeySizeDES, 
                                              _iv_, 
                                              [cipherData bytes], 
                                              [cipherData length], 
                                              buffer, 
                                              8196, 
                                              &numBytesDecrypted);
        NSString* plainText = nil;
        
        /**
         * 2012.05.27.09.34,中间遇到一个问题,
         * 查看了一下返回的状态码,皆是因为 buffer 的尺寸过小所致
         * 最开始 buffer 的长度是 1024~
         */
    //    NSLog(@"%d", cryptStatus);
        
        if (cryptStatus == kCCSuccess) {
            NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
            plainText = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
        }
        return plainText;
    }
    
    
    @end



  • 相关阅读:
    bzoj 4260 Codechef REBXOR——trie树
    bzoj 2238 Mst——树链剖分
    bzoj 2836 魔法树——树链剖分
    CF 888E Maximum Subsequence——折半搜索
    bzoj 4289 PA2012 Tax——构图
    bzoj 4398 福慧双修——二进制分组
    bzoj1116 [POI2008]CLO——并查集找环
    bzoj4241 历史研究——分块
    bzoj4373 算术天才⑨与等差数列——线段树+set
    bzoj4034 [HAOI2015]树上操作——树链剖分
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212285.html
Copyright © 2011-2022 走看看