· 7 years ago · Jun 21, 2018, 02:50 PM
1//
2// NSString+Encryption.m
3// Questionnaire
4//
5// Created by lushuai on 2018/1/8.
6// Copyright © 2018年 zgjzd. All rights reserved.
7//
8
9#import "NSString+Encryption.h"
10#import <CommonCrypto/CommonDigest.h>
11#import <CommonCrypto/CommonHMAC.h>
12#define SECRET_KEY @"JSDKFKAFSGNSNDGN"
13@implementation NSString (Encryption)
14
15//sha256åŠ å¯†
16- (NSString*)sha256
17{
18 const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
19 NSData *data = [NSData dataWithBytes:cstr length:self.length];
20 uint8_t digest[CC_SHA256_DIGEST_LENGTH];
21 CC_SHA256(data.bytes, data.length, digest);
22 NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
23 for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
24 [output appendFormat:@"%02x", digest[i]];
25
26 return output;
27}
28
29- (NSString *)sha256AndBase64 {
30 const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
31 NSData *data = [NSData dataWithBytes:cstr length:self.length];
32 uint8_t digest[CC_SHA256_DIGEST_LENGTH];
33 CC_SHA256(data.bytes, data.length, digest);
34
35 NSData *shaData = [NSData dataWithBytes:digest length:sizeof(digest)/sizeof(uint8_t)];
36 NSString *base64 = [shaData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
37 return base64;
38}
39
40//base64åŠ å¯†
41- (NSString *)base64EncodedString;
42{
43 NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
44 return [data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
45}
46//md5åŠ å¯†
47- (NSString *)md5 {
48 const char *cStr = [self UTF8String];
49 unsigned char digest[CC_MD5_DIGEST_LENGTH];
50 CC_MD5(cStr, (CC_LONG)strlen(cStr), digest);
51 NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
52 for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
53 [result appendFormat:@"%02X", digest[i]];
54 }
55 return result;
56}
57-(NSString *)encryptionStringWithSalt:(NSString *)salt {
58 NSString *joint = [NSString stringWithFormat:@"%@%@",self.sha256AndBase64,salt];
59 NSLog(@"%@",self.sha256AndBase64);
60 return joint.md5.lowercaseString;
61}
62
63+ (NSString *)generateSalt{
64 // 32 * 8 = 256 bit
65 NSMutableData *data = [NSMutableData dataWithLength:32];
66
67 //SecRandom is a true random generator. arc4Random is not.
68 int result = SecRandomCopyBytes(kSecRandomDefault, 32, data.mutableBytes);
69
70 // log the result
71 NSString *saltString = [data base64EncodedStringWithOptions:0];
72
73 if (result == -1) {
74 NSLog(@"Error Generating Salt:%@.", saltString);
75 }
76
77 return saltString;
78}
79
80
81
82@end