您的位置:首页 > 其它

Base64加密解密,钥匙串加密,公钥私钥加密解密

2016-01-08 16:25 597 查看

Base64加密解密

// 对字符串进行加密
NSString *encodStr = [GTMBase64 encodeBase64String:@"程锦乐眼睛小"];
NSLog(@"%@", encodStr);

// 解密
NSString *decodeStr = [GTMBase64 decodeBase64String:encodStr];
NSLog(@"%@", decodeStr);

// 字典
NSDictionary *dic = @{@"少爷":@"一直在吃", @"郡主":@"一直研究吃", @"尹德建":@"看他俩吃"};
NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:0 error:nil];
// 加密
NSData *encode = [GTMBase64 encodeData:data];
// 解码
NSData *newData = [GTMBase64 decodeData:encode];
NSDictionary *newDic = [NSJSONSerialization JSONObjectWithData:newData options:0 error:nil];
NSLog(@"%@", newDic);


钥匙串加密:一般来讲,当程序被删除之后,沙盒里保存的内容比如收藏或者用户名密码等信息都被移除掉了.所以在这个时候想保留用户账号等私密信息可以通过钥匙串进行保存,存到钥匙串的数据也是相对安全的

// 再用钥匙串进行加密解密的时候,一定要把当前的工程从ARC修改成MRC
KeychainItemWrapper *wrapper = [[KeychainItemWrapper alloc] initWithIdentifier:@"chain" accessGroup:nil];
// 通过钥匙串加密用户名
[wrapper setObject:@"郡主" forKey:(id)kSecAttrAccount];
// 通过钥匙串加密密码
[wrapper setObject:@"123456" forKey:(id)kSecValueData];

NSString *userName = [wrapper objectForKey:(id)kSecAttrAccount];
NSString *pass = [wrapper objectForKey:(id)kSecValueData];
NSLog(@"%@", userName);
NSLog(@"%@", pass);


公钥私钥加密解密

公钥和私钥称为非对称加密解密,通过公钥和私钥对进行对数据的加密和解密

公钥一般存在客户端,私钥一般存在服务器端,而且私钥必须要加密,保证安全,不能泄露

公钥对数据加密之后,将密文发送到服务器端,服务器在利用私钥对密文进行解密,服务器信息通过私钥进行加密,在通过客户端的公钥进行解密,从而显示内容

公钥和私钥使用在像支付宝支付,微信支付等跟钱有关的操作上

NSString *publicKey = @"-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDEChqe80lJLTTkJD3X3Lyd7Fj+\nzuOhDZkjuLNPog3YR20e5JcrdqI9IFzNbACY/GQVhbnbvBqYgyql8DfPCGXpn0+X\nNSxELIUw9Vh32QuhGNr3/TBpechrVeVpFPLwyaYNEk1CawgHCeQqf5uaqiaoBDOT\nqeox88Lc1ld7MsfggQIDAQAB\n-----END PUBLIC KEY-----";
NSString *str = @"hello lin";
// 通过公钥对这个字符串进行加密
NSString *encryStr = [RSA encryptString:str publicKey:publicKey];
NSLog(@"%@", encryStr);

// 通过私钥把密文进行解密
NSString *privateKey = @"-----BEGIN RSA PRIVATE KEY-----\nMIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAMQKGp7zSUktNOQk\nPdfcvJ3sWP7O46ENmSO4s0+iDdhHbR7klyt2oj0gXM1sAJj8ZBWFudu8GpiDKqXw\nN88IZemfT5c1LEQshTD1WHfZC6EY2vf9MGl5yGtV5WkU8vDJpg0STUJrCAcJ5Cp/\nm5qqJqgEM5Op6jHzwtzWV3syx+CBAgMBAAECgYEApSzqPzE3d3uqi+tpXB71oY5J\ncfB55PIjLPDrzFX7mlacP6JVKN7dVemVp9OvMTe/UE8LSXRVaFlkLsqXC07FJjhu\nwFXHPdnUf5sanLLdnzt3Mc8vMgUamGJl+er0wdzxM1kPTh0Tmq+DSlu5TlopAHd5\nIqF3DYiORIen3xIwp0ECQQDj6GFaXWzWAu5oUq6j1msTRV3mRZnx8Amxt1ssYM0+\nJLf6QYmpkGFqiQOhHkMgVUwRFqJC8A9EVR1eqabcBXbpAkEA3DQfLVr94vsIWL6+\nVrFcPJW9Xk28CNY6Xnvkin815o2Q0JUHIIIod1eVKCiYDUzZAYAsW0gefJ49sJ4Y\niRJN2QJAKuxeQX2s/NWKfz1rRNIiUnvTBoZ/SvCxcrYcxsvoe9bAi7KCMdxObJkn\nhNXFQLav39wKbV73ESCSqnx7P58L2QJABmhR2+0A5EDvvj1WpokkqPKmfv7+ELfD\nHQq33LvU4q+N3jPn8C85ZDedNHzx57kru1pyb/mKQZANNX10M1DgCQJBAMKn0lEx\nQH2GrkjeWgGVpPZkp0YC+ztNjaUMJmY5g0INUlDgqTWFNftxe8ROvt7JtUvlgtKC\nXdXQrKaEnpebeUQ=\n-----END RSA PRIVATE KEY-----";
NSString *decryStr = [RSA decryptString:encryStr privateKey:privateKey];
NSLog(@"%@", decryStr);

NSDictionary *dic = @{@"不能说":@"秘密", @"j哥特点":@"眼睛小"};
// 一:将对象类型转换成NSData类型!!!!!!!!!!!!!!!!!!!!!!!!
//    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dic];
//  二:将对象类型转换成NSData类型!!!!!!!!!!!!!!!!!!!!!!!!
// 通过json进行可逆操作
NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
// 对字典等对象进行加密操作的时候,先转换成NSData
// 通过公钥进行加密
NSData *encryData = [RSA encryptData:data publicKey:publicKey];
// 根据私钥进行解密
NSData *dencryData = [RSA decryptData:encryData privateKey:privateKey];
NSDictionary *newDic = [NSJSONSerialization JSONObjectWithData:dencryData options:0 error:nil];
[newDic enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
NSLog(@"%@", key);
NSLog(@"%@", obj);
}];

// 服务器通过加密之后的密文,客户需要用公钥取解密
NSString *encryptStr = @"F+feHOH6807tUV/drvepAMzKlVKRsoDFRkFNfhS9kgVoBt2E6OnUIVw12l608yQGWiqtq8rgZgMY/VCQYZB+3r2rhDlyZ2fjo00sUFOp5BkNPFTs/NpQAolD6V3ifNgDmBQP92uVbxbod1pLRwLC0wLOhr5flQXvvobeg5KrDeE=";
// 客户端接收到这段密文之后,通过手里的公钥进行解密操作
NSString *str2 = [RSA decryptString:encryptStr publicKey:publicKey];
NSLog(@"%@", str2);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: