加密算法分类
- 对称加密:加密和解密都是使用一个密钥,密钥的保密工作就非常重要.
- 非对称加密:用公钥加密,私钥解密; 用私钥加密,公钥解密.
对称加密
常见对称加密算法
- DES 数据加密标准
- 3DES
- AES "高级"加密标准
- ECB 电子代码本,每个块都是独立加密的
- CBC 密码块链:使用一个密钥和一个初始化向量 (IV)对数据执行加密转换,可以有效地保证密文的完整性。
ECB 终端测试命令
$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin //加密
$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.bin -out msg1.txt -d //解密
$ xxd msg1.bin // 查看加密之后的二进制文件
CBC终端测试命令
$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in a.txt -out msg1.bin //加密
$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.bin -out msg4.txt -d //解密
$ xxd msg1.bin //查看加密之后的二进制文件
非对称加密算法
概要
RSA原理1.加密解密方法: 用公钥解密然后用私钥解密;或者私钥加密然后用公钥解密
2.优缺点,优点是安全 缺点是速度慢
OpenSSL 终端命令
openssl genrsa -out private.pem 512 //生成强度是 512 的 RSA 私钥
openssl rsa -in private.pem -text -out private.txt //以明文输出私钥内容
openssl rsa -in private.pem -check //校验私钥文件
openssl rsa -in private.pem -out public.pem -outform PEM -pubout //从私钥中提取公钥
$ openssl rsa -in public.pem -out public.txt -pubin -pubout -text //以明文输出公钥内容
openssl rsautl -encrypt -pubin -inkey public.pem -in msg.txt -out msg.bin //使用公钥加密小文件
openssl rsautl -decrypt -inkey private.pem -in msg.bin -out a.txt //使用私钥解密小文件
openssl rsa -in private.pem -out private.der -outform der //将私钥转换成 DER 格式
openssl rsa -in public.pem -out public.der -pubin -outform der //将公钥转换成 DER 格式
iOS 相关证书生成命令
openssl genrsa -out ca.key 1024 //生成私钥
openssl req -new -key ca.key -out rsacert.csr //创建证书请求
openssl x509 -req -days 3650 -in rsacert.csr -signkey ca.key -out rsacert.crt //生成证书并签名,有效期10年
openssl x509 -outform der -in rsacert.crt -out rsacert.der //将 PEM 格式文件转换成 DER 格式
openssl pkcs12 -export -out p.p12 -inkey ca.key -in rsacert.crt //入P12文件
安全之签名
MD5
Hash 散列函数不可逆的特点,是“加密”的另一种应用,可实现对安全信息的签名验证和标志文件。【不是正真的加密算法】
RSA
RSA算法有两个作用一个是加密一个是数字签名
数字签名
发送方
"报文" HASH 得到 "报文摘要"
"报文摘要" 用公钥加密(数字签名) + 报文
发送给接收方
接收方
"报文" HASH 得到 "报文摘要"
"数字签名" 用私钥解密 判断是否与 "报文摘要" 相同
iOS 安全特有功能
1.手机指纹、密码登录
1 判断是否有使用指纹或密码验证: - (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)error attribute((swift_error(none)));
policy 分为: LAPolicyDeviceOwnerAuthenticationWithBiometrics 和 LAPolicyDeviceOwnerAuthentication, 前者只使用指纹,后者在指纹失败后会弹出密码验正。
2 请求验证,弹出验证界面 - (void)evaluatePolicy:(LAPolicy)policy localizedReason:(NSString *)localizedReason reply:(void(^)(BOOL success, NSError * error))reply;
3 验证结果,如果 success 是YES标志验证成功,NO标志不成功。 当验证不成共时,error 有:
3.1 LAErrorAuthenticationFailed - 指纹无法识别
3.2 LAErrorUserCancel --用户点击了取消
3.3 LAErrorUserFallback --用户点击了输入密码
3.4 LAErrorSystemCancel --系统取消
3.5 LAErrorPasscodeNotSet --因为你设备上没有设置密码
3.6 LAErrorTouchIDNotAvailable --设备没有Touch ID
3.7 LAErrorTouchIDNotEnrolled --因为你的用户没有输入指纹
3.8 LAErrorTouchIDLockout --多次输入,密码锁定
3.9 LAErrorAppCancel-- 比如电话进入,用户不可控的
2.钥匙串:保存安全性很高的小数据,他还具有一次保存,长久保留【删除应用后还存在】的特点
iOS 中重要的函数
1.非对称加密函数
SecKeyEncrypt 使用公钥对数据加密
SecKeyDecrypt 使用私钥对数据解密
SecKeyRawVerify 使用公钥对数字签名进行验证
SecKeyRawSign 使用私钥生成数字签名
网友评论