小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
iOS加密相关算法框架:CommonCrypto
。
1.对称加密
iOS中的对称加密有 DES
、3DES
、AES
。
- 加密和解密使用同一个密钥。
- 加密解密过程:
- 明文->密钥加密->密文,
- 密文->密钥解密->明文。
- 优点:算法公开、计算量少、加密速度快、加密效率高、适合大批量数据加密;
- 缺点:双方使用相同的密钥,密钥传输的过程不安全,易被破解,因此为了保密其密钥需要经常更换。
1.1 AES
AES又称高级加密标准,是下一代的加密算法标准,支持128、192、256位密钥的加密,加密和解密的密钥都是同一个。iOS一般使用ECB
模式,16字节128位密钥。
AES算法主要包括三个方面:轮变化、圈数和密钥扩展。
- 优点:高性能、高效率、灵活易用、安全级别高。
- 缺点:加密与解密的密钥相同,所以前后端利用AES进行加密的话,如何安全保存密钥就成了一个问题。
1.2 DES
DES:数据加密标准,DES
算法的入口参数有三个:Key
、Data
、Mode
。
- 其中
Key
为7个字节共56位,是DES算法的工作密钥;Data
为8字节64位,是要被加密或被解密的数据;Mode
为DES的工作方式,有两种:加密、解密。 - 缺点:与AES相比,安全性较低。
1.3 3DES
3DES是DES加密算法的一种模式,它使用3条64位密钥对数据进行三次加密。是DES向AES过渡的加密算法,是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法。
2.非对称加密:RSA加密
- 非对称加密算法需要成对出现的两个密钥,公开密钥(
publickey
)和私有密钥(privatekey
)。 - 加密解密过程:对于一个私钥,有且只有一个与之对应的公钥。生成者负责生成私钥和公钥,并保存私钥,公开公钥。
公钥加密,私钥解密;或者私钥数字签名,公钥验证。公钥和私钥是成对的,他们互相解密。
- 特点:
- 1.对信息保密,防止中间人攻击:将明文通过接收人的公钥加密,传输给接收人,因为只有接收人拥有对应的私钥,别人不可能拥有或者不可能通过公钥推算出私钥,所以传输过程中无法被中间人截获。只有拥有私钥的接收人才能阅读。此方法通常用于交换对称密钥。
- 2.身份验证和防止篡改:权限狗用自己的私钥加密一段授权明文,并将授权明文和加密后的密文,以及公钥一并发送出来,接收方是需要通过公钥将密文解密后与授权明文对比是否一致,就可以判断明文在中途是否被篡改过。此方法用于数字签名。
- 优点:加密程度小,加密时间长,常用于数字签名和加密密钥、安全性非常高、解决了对称加密保存密钥的安全问题。
- 缺点:加密解密速度远慢于对称加密,不适合大批量数据加密。
3. 哈希算法加密:MD5加密
、.SHA加密
、HMAC加密
- 哈希算法加密是通过哈希算法对数据加密,加密后的结果不可逆,即加密后不能再解密。
- 特点:不可逆、算法公开、相同数据加密结果一致。
- 作用:信息摘要,信息“指纹”,用来做数据识别的。如:用户密码加密、文件校验、数字签名、鉴权协议。
MD5加密:对不同的数据加密的结果都是定长的32位字符。
.SHA加密:安全哈希算法,主要适用于数字签名标准(DSS)里面定义的数字签名算法(DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。当然除了SHA1还有SHA256以及SHA512等。
HMAC加密:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32位字符串。
4. Base64加密
- 一种编码方式,严格意义上来说不算加密算法。其作用就是将二进制数据编码成文本,方便网络传输。
- 用base64编码之后数据长度会变大,增加了大约1/3,但是好处是编码后的数据可以直接在邮件和网页中显示;
- 虽然base64可以作为加密,但是base64能够逆运算,非常不安全!
- base64编码有个非常显著的特点,末尾有个‘=’号。
- 原理:
- 1.将所有字符转化为ASCII码;
- 2.将ASCII码转化为8位二进制;
- 3.将二进制三位一组不足补0,共24位,再拆分成6位一组共四组;
- 4.统一在6位二进制前补两个0到八位;
- 5.将补0后的二进制转为十进制;
- 6.最后从Base64编码表获取十进制对应的Base64编码。