ios加密

来源:互联网 发布:淘宝前端 编辑:程序博客网 时间:2024/05/18 01:40


#import "ViewController.h"

#import <CommonCrypto/CommonCryptor.h>

#import <CommonCrypto/CommonDigest.h>


@interface ViewController ()


@end


@implementation ViewController


- (void)viewDidLoad {

    [superviewDidLoad];

    //[self aesTest];

   // [self md5AndSha1Test];

    Byte by[8] = {33,2,3,4,5,6,7,8};

    NSData *data = [NSDatadataWithBytes:by length:8];

    NSString *str = [[NSStringalloc] initWithData:dataencoding:NSUTF8StringEncoding];

    NSLog(@"%@",str);

}


#pragma mark - md5 和 sha1 散列加密 不可逆


-(void)md5AndSha1Test {

    NSString *str =@"djgj的结局给大家gjggjgjfgjfjfjfjfjfjfjfjjfjfj";

    NSLog(@"%ld  %@",[[selfsha1_base64:str] length],[selfsha1:str]);

    NSLog(@"%ld  %@",[[selfmd5_base64:str] length],[selfmd5:str]);

}


//40位

- (NSString*) sha1:(NSString *)str

{

    constchar *cstr = [strcStringUsingEncoding:NSUTF8StringEncoding];

    NSData *data = [NSDatadataWithBytes:cstr length:str.length];

    //使用对应的CC_SHA1,CC_SHA256,CC_SHA384,CC_SHA512的长度分别是20,32,48,64

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    //使用对应的CC_SHA256,CC_SHA384,CC_SHA512

    CC_SHA1(data.bytes,(CC_LONG)data.length, digest);

    NSMutableString* output = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];

    NSLog(@"%s",digest);

    for(int i =0; i < CC_SHA1_DIGEST_LENGTH; i++)

        [output appendFormat:@"%02x", digest[i]];

    return output;

}


-(NSString *) md5:(NSString *)str

{

    const char *cStr = [strUTF8String];

    unsignedchar digest[CC_MD5_DIGEST_LENGTH];

    CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );

    NSMutableString *output = [NSMutableStringstringWithCapacity:CC_MD5_DIGEST_LENGTH *2];

    for(int i =0; i < CC_MD5_DIGEST_LENGTH; i++)

        [output appendFormat:@"%02x", digest[i]];

    return output;

}


- (NSString *) sha1_base64:(NSString *)str

{

    constchar *cstr = [strcStringUsingEncoding:NSUTF8StringEncoding];

    NSData *data = [NSDatadataWithBytes:cstr length:str.length];

    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes,(CC_LONG)data.length, digest);

    NSData * base64 = [[NSDataalloc]initWithBytes:digestlength:CC_SHA1_DIGEST_LENGTH];

    NSString *  base64Str =  [base64 base64EncodedStringWithOptions:0];;

    return base64Str;

}


- (NSString *) md5_base64:(NSString *)str

{

    const char *cStr = [strUTF8String];

    unsignedchar digest[CC_MD5_DIGEST_LENGTH];

    CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );

    NSData * base64 = [[NSDataalloc]initWithBytes:digestlength:CC_MD5_DIGEST_LENGTH];

    NSString *  base64Str =  [base64 base64EncodedStringWithOptions:0];

    return base64Str;

}



#pragma mark -aes加密  对称加密


-(void)aesTest {

    NSString *str =@"djgjgjgjggjgjfgjfjfjfjfjfjfjfjjfjfjjfjffjjjfjfjfjfjfjfjfjfjfjff";

    NSData *data = [strdataUsingEncoding:NSUTF8StringEncoding];

    NSData *enData =[selfAES256ParmEncryptWithKey:@"123"Encrypttext:data];

    NSData *deData = [selfAES256ParmDecryptWithKey:@"123"Decrypttext:enData];

    NSLog(@"%@",[[NSStringalloc] initWithData:deDataencoding:NSUTF8StringEncoding]);

}


-(NSData *)AES256ParmEncryptWithKey:(NSString *)key Encrypttext:(NSData *)text //加密

{

    char keyPtr[kCCKeySizeAES256+1];

    bzero(keyPtr, sizeof(keyPtr));

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

    NSUInteger dataLength = [text length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    size_t numBytesEncrypted = 0;

    CCCryptorStatus cryptStatus =CCCrypt(kCCEncrypt,kCCAlgorithmAES128,

                                          kCCOptionPKCS7Padding |kCCOptionECBMode,

                                          keyPtr, kCCBlockSizeAES128,

                                          NULL,

                                          [text bytes], dataLength,

                                          buffer, bufferSize,

                                          &numBytesEncrypted);

    if (cryptStatus == kCCSuccess) {

        return [NSDatadataWithBytesNoCopy:buffer length:numBytesEncrypted];

    }

    free(buffer);

    return nil;

}


- (NSData *)AES256ParmDecryptWithKey:(NSString *)key Decrypttext:(NSData *)text //解密

{

    char keyPtr[kCCKeySizeAES256+1];

    bzero(keyPtr, sizeof(keyPtr));

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

    NSUInteger dataLength = [text length];

    size_t bufferSize = dataLength + kCCBlockSizeAES128;

    void *buffer = malloc(bufferSize);

    size_t numBytesDecrypted = 0;

    CCCryptorStatus cryptStatus =CCCrypt(kCCDecrypt,kCCAlgorithmAES128,

                                          kCCOptionPKCS7Padding |kCCOptionECBMode,

                                          keyPtr, kCCBlockSizeAES128,

                                          NULL,

                                          [text bytes], dataLength,

                                          buffer, bufferSize,

                                          &numBytesDecrypted);

    if (cryptStatus == kCCSuccess) {

        return [NSDatadataWithBytesNoCopy:buffer length:numBytesDecrypted];

    }

    free(buffer);

    return nil;

}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 80岁老人植物人怎么办 steam账户创不起怎么办 小孩读书没有居住证怎么办 小孩上学没有准生证怎么办 小学在外地初中怎么办 小孩上学没准生证怎么办 没结婚出生证明怎么办 异地上高中高考怎么办 高中去外地上学怎么办 农村在城里上学怎么办? 父母没钱不工作怎么办 qq被家长偷看怎么办 孩子考差了怎么办 父母翻看qq记录怎么办 孩子qq屏蔽父母怎么办 杜鹃花老叶脱落怎么办 父母对孩子不好怎么办 家长看孩子手机怎么办 六年级打四年级学生怎么办 儿童被家长打怎么办 老师打孩子耳光怎么办 孩子动手打母亲怎么办 小孩被老师体罚怎么办 儿子跟父母对打怎么办 两个孩子争东西怎么办 大人吵架小孩该怎么办 小孩老爱顶嘴怎么办 孩子老爱顶嘴怎么办 孩子不愿分房睡怎么办 孩子不愿意去补课怎么办 高中孩子不愿意补课怎么办 孩子协调性不好怎么办 孩子暑假不愿意补课怎么办 话唠的孩子怎么办 孩孑不做作业怎么办 孩子有消极情绪怎么办 孩子太依赖奶奶怎么办 缺少母爱的孩子怎么办 孩子分房睡害怕怎么办 孩子厌烦写作业怎么办 孩子怕黑胆小怎么办