我们在项目开发过程中,有一些地方是需要进行加密操作的,比如:一些用户在登录或支付时,设置的密码可能不止在一个APP中使用,如果网络传输的时候使用的是明文,非法者可以利用软件比如:(Charles)设置代理服务器,通过免费无加密的wifi,拦截查看手机的请求数据,从而获取到用户的敏感信息,这将对用户产生很大的安全隐患。
一:网络安全传输
利用RSA加密解密
实现的步骤:
第一步是生成公钥和私钥
1.新建文件夹,用来保存生成的私钥和公钥,打开终端 cd 新建,进入到新建文件夹中,openssl,打开openssl
11.png
2.genrsa -out rsa_private_key.pem 1024
生成私钥
3.pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
这步一定要有,需要将私钥转成PKCS8的格式才能使用,此时复制私钥(先复制私钥,然后在4步取出公钥)
4.rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成公钥
此时在新建文件夹中会出现两个文件
55.png
用文本编辑器打开便可获取生成的公钥和私钥。
第二步
66.png //公钥
NSString *publicKey = @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDl5RBHD3abOyeYCOLkaWkpJXgJQfMklOWPmdJAnG1eD6CV+UOpUKMy5LtfGHQEM7ao5x3BpMx4MNRUYVwBAmU84PhwNm6xpTJrg5zZCloFmsX+E5ukWE5YFRu8i5+5d8LuQTTTv4XfzbTCTOhON8uj+ypkomETuVNwgRFVFjHd1QIDAQAB";
//私钥
NSString *privateKey = @"MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOXlEEcPdps7J5gI4uRpaSkleAlB8ySU5Y+Z0kCcbV4PoJX5Q6lQozLku18YdAQztqjnHcGkzHgw1FRhXAECZTzg+HA2brGlMmuDnNkKWgWaxf4Tm6RYTlgVG7yLn7l3wu5BNNO/hd/NtMJM6E43y6P7KmSiYRO5U3CBEVUWMd3VAgMBAAECgYEAkqHVDQ4O35oOegmI9plJauYsNvNqqzWRalN5aJ6dn3YmPiI8Bt2ZClgcLt6A+UEmy3qGX0HG7Q5wD9X9geNOQB3ZiD/pGAGW08wS/wTxnWSnSBwdtZ03pUttfnFctkxULfDq4iG1ywdjqEk3F8QVFajQ0c76kWbt9LGAv2OGIi0CQQD2CmbVFXy4JeNHK3TDoLMjsUCiLa+qPnyyVDLDG9Ozb7wN2ydTrMhI+0udmjKvy/Lm1E2bKyp42iYuubEqvSAXAkEA7zNZsOgUe0q73sxXqrLQ7Fs7TNtIEXghrGmkVTHN0I7uMKzQ7KEbA6hfcBm4hPMoLa6Ag3m9tiMNBWtDWc/Y8wJAK0//dEl5EC3TSccTohCbGJBukV47i1u+teHuobw3U2I7F7FZxfgntflPAWqQu7PKieob01IRAv9cM2OLFbv/dwJBAIniXedeQMA5ekaaIEbjwQ8eH/bTyJ1ZVH/gfbwmc2+vlJo2ZFCjJcFcA3fJO9ZXnGeI2cfwG22sksr24+IXsAUCQG5yvVIleTDYqWuWVG1Rc8fk5UFjoZzJpp0nil0z+0fR5rogr4fxcH7vbWsE0id7gSvtV7KxPzkvJTpOK3yGDN0=";
//测试要加密的数据
NSString *sourceStr = @"iOS端RSA";
//公钥加密
NSString *encryptStr = [RSA encryptString:sourceStr publicKey:publicKey];
//私钥解密
NSString *decrypeStr = [RSA decryptString:encryptStr privateKey:privateKey];
NSLog(@"加密后的数据 %@ 解密后的数据 %@",encryptStr,decrypeStr);
二:本地数据安全
NSUserDefaults
NSUserDefaults本身是以明文形式存储在.plist文件中,文件的位置是Library/Application Support/iPhone Simulator/模拟器版本/Applications/应用对应的数字/Library/Preference/.plist文件,如果app被破解,那么数据就会泄漏,应该先对数据进行加密算法处理后再使用NSUserDefaults进行存储。
NSKeyedArchiver(归档与解档)
NSKeyedArchiver归档是把对象或者数据结构转换成二进制数据存储起来,他人在获取到归档后的二进制数据时,由于不知道解档后类的参数情况,所以无法从这一段二进制数据中恢复出原来被加密的数据,因而比较安全。
Keychain
Keychain是iOS所提供的一种安全存储参数的方式,最常用来存储账号,密码,用户信息,银行卡资料等信息,Keychain会以加密的方式存储在设备的钥匙串中