RSA : 非对称加密方式 密钥:包含公钥和私钥 公钥:用于加密数据,用于公开,一般存放在数据提供方,IOS客户端. 私钥:用于解密数据,必须保密,私钥泄露会造成安全问题

//使用系统的MD5加密  需要导入头文件

#import <CommonCrypto/CommonCrypto.h>

  /**

     *MD5加密:

     */

//字符串

-(NSString *)md5SecureWithString:(NSString *)str{

    //使用CC_MD5函数进行加密:MD5函数声明的密文由16个16进制的字符组成.

    //将OC字符串转为C语言字符串

    const char *CStr = str.UTF8String;

    /**

     *  @param data#> 要加密的C语言字符串

     *  @param len#>  C语言字符串的长度

     *  @param md#>   生成的16个16进制字符的数组的首地址

     */

    //声明一个字符数组  可存放16个字符

    unsigned char result[CC_MD5_DIGEST_LENGTH];

    CC_MD5(CStr, (CC_LONG)strlen(CStr), result);

    //遍历该C语言数组 将其中的16个字符串拼接起来,形成OC字符串

    NSMutableString *string = [NSMutableString string];

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

        [string appendFormat:@"%02X",result[i]];

    }

    NSLog(@"%@",string);

    return string;

}

/**

其他数据类型加密:先转为NSData对象->获取对应NSData的MD5值

 */

//NSData:

-(NSString *)md5WithData:(NSData *)data{

    //1.声明MD5变量

    CC_MD5_CTX md5;

    //2.MD5变量进行初始化

    CC_MD5_Init(&md5);

    //3.准备进行MD5加密

    /*

     *  @param c#>    MD5变量地址 description#>

     *  @param data#> NSData的C语言类型description#>

     *  @param len#>  data的长度 description#>

     */

    CC_MD5_Update(&md5, data.bytes, (CC_LONG)data.length);

    //4.结束加密(代表加密结束,会将生成好的字符给我们)

    unsigned char result[CC_MD5_DIGEST_LENGTH];

    CC_MD5_Final(result, &md5);

    NSMutableString *str = [NSMutableString string];

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

        [str appendFormat:@"%2X",result[i]];

    }

//    NSLog(@"%@",str);

    return str;

}

- (void)md5WithPerson:(Person *)person{

    //per ->NSData

    //归档操作 复杂对象必须服从协议;

    NSData *data =  [NSKeyedArchiver archivedDataWithRootObject:person];

    //NSData ->MD5加密

 NSString *result = [self md5WithData:data];

    NSLog(@"sss%@",result);

}

//数组:数组,字典和集合这些集合类能不能归档转为NSData,取决于其中的元素类型是否服从NSCoding协议.

-(void)md5WithArray:(NSArray *)arr{

    //arr ->NSData;

 NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];

    //NSData -> MD5加密

  NSString *str =  [self md5WithData:data];

    NSLog(@"数组:%@",str);

}

/**

    钥匙串:

     钥匙串加密是系统级别的,保存在其中的数据是进行过加密的,保存的类型不多:如 账号,密码,证书,秘钥.

     */

//发文钥匙串,导入头文件.(编译环境是MRC)

#import "KeychainItemWrapper.h"

    //写入钥匙串

    //从钥匙串中读取用户名和密码

//保存用户名和密码到钥匙串.

- (void)saveToKeyChainWithUserName:(NSString *)userName passWord:(NSString *)passWord{

    //1.创建KeychainItemWrapper钥匙串访问对象

    /**

      参数①:钥匙串访问对象的表示(和读取时保持一致即可);

     参数②:分享分组设置

     */

    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"zhou" accessGroup:nil];

    //2.key不是自定义的, key是由系统提供的. kSecAttrAccount:一般用于存储账号;  kSecValueData:一般用于存储一些值,如:密码;

    //Foundation框架中的类型,类型要进行转化,一般需要建立一个桥,

    [wrapper setObject:userName forKey:(__bridge id) kSecAttrAccount];

    [wrapper setObject:passWord forKey:(__bridge id)kSecValueData];

}

//从钥匙串中读取用户名和密码

- (void)readFromKeychain{

    //钥匙串访问对象  identifier 需要保持一致

    KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc]initWithIdentifier:@"zhou" accessGroup:nil];

    //取出对应key值

    //读取账号

  NSString *userName = [wrapper objectForKey:(id)kSecAttrAccount];

    //读取密码

 NSString *passWord = [wrapper objectForKey:(id)kSecValueData];

    NSLog(@"user:%@ pwd:%@",userName,passWord);

}

RSA:

  /**

    RSA : 非对称加密方式

     密钥:包含公钥和私钥

     公钥:用于加密数据,用于公开,一般存放在数据提供方,IOS客户端.

     私钥:用于解密数据,必须保密,私钥泄露会造成安全问题

     */

#import "RSA.h"

#pragma mark - RSA -

-(void)RSAWithString:(NSString *)str{

    NSString *publicKey = @"-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEChqe80lJLTTkJD3X3Lyd7Fj+ zuOhDZkjuLNPog3YR20e5JcrdqI9IFzNbACY/GQVhbnbvBqYgyql8DfPCGXpn0+X NSxELIUw9Vh32QuhGNr3/TBpechrVeVpFPLwyaYNEk1CawgHCeQqf5uaqiaoBDOT qeox88Lc1ld7MsfggQIDAQAB -----END PUBLIC KEY-----";

    //公钥进行加密

    /**

     *  @param NSString 要加密的字符串

     *  参数②:公钥字符串.

     */

  NSString *secRSAStr = [RSA encryptString:str publicKey:publicKey];

    NSLog(@"secRSAStr:%@",secRSAStr);

    //解密:使用私钥

    NSString *privateKey = @"-----BEGIN RSA PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQKGp7zSUktNOQk PdfcvJ3sWP7O46ENmSO4s0+iDdhHbR7klyt2oj0gXM1sAJj8ZBWFudu8GpiDKqXw N88IZemfT5c1LEQshTD1WHfZC6EY2vf9MGl5yGtV5WkU8vDJpg0STUJrCAcJ5Cp/ m5qqJqgEM5Op6jHzwtzWV3syx+CBAgMBAAECgYEApSzqPzE3d3uqi+tpXB71oY5J cfB55PIjLPDrzFX7mlacP6JVKN7dVemVp9OvMTe/UE8LSXRVaFlkLsqXC07FJjhu wFXHPdnUf5sanLLdnzt3Mc8vMgUamGJl+er0wdzxM1kPTh0Tmq+DSlu5TlopAHd5 IqF3DYiORIen3xIwp0ECQQDj6GFaXWzWAu5oUq6j1msTRV3mRZnx8Amxt1ssYM0+ JLf6QYmpkGFqiQOhHkMgVUwRFqJC8A9EVR1eqabcBXbpAkEA3DQfLVr94vsIWL6+ VrFcPJW9Xk28CNY6Xnvkin815o2Q0JUHIIIod1eVKCiYDUzZAYAsW0gefJ49sJ4Y iRJN2QJAKuxeQX2s/NWKfz1rRNIiUnvTBoZ/SvCxcrYcxsvoe9bAi7KCMdxObJkn hNXFQLav39wKbV73ESCSqnx7P58L2QJABmhR2+0A5EDvvj1WpokkqPKmfv7+ELfD HQq33LvU4q+N3jPn8C85ZDedNHzx57kru1pyb/mKQZANNX10M1DgCQJBAMKn0lEx QH2GrkjeWgGVpPZkp0YC+ztNjaUMJmY5g0INUlDgqTWFNftxe8ROvt7JtUvlgtKC XdXQrKaEnpebeUQ= -----END RSA PRIVATE KEY-----";

  NSString *unSecRSAStr = [RSA decryptString:secRSAStr privateKey:privateKey];

    NSLog(@"unSecRSAStr:%@",unSecRSAStr);

}