iOS里常见的几种信息编码、加密方法简单总结

一.MD5算法

MD5编码是最经常使用的编码方法之一,是从一段字符串中经过相应特征生成一段32位的数字字母混合码。数据库

MD5主要特色是 不可逆,相同数据的MD5值确定同样,不一样数据的MD5值不同(也不是绝对的,但基本是不能同样的)。安全

MD5算法还具备如下性质:服务器

一、压缩性:任意长度的数据,算出的MD5值长度都是固定的。网络

二、容易计算:从原数据计算出MD5值很容易。网站

三、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所获得的MD5值都有很大区别。编码

四、弱抗碰撞:已知原数据和其MD5值,想找到一个具备相同MD5值的数据(即伪造数据)是很是困难的。加密

五、强抗碰撞:想找到两个不一样的数据,使它们具备相同的MD5值,是很是困难的。spa

 

MD5虽说是不可逆的 可是因为有网站http://www.cmd5.com的存在,专门用来查询MD5码 因此有的简单的MD5码是能够在这里搜到源码的。md5

为了让MD5码更加安全 涌现了不少其余方法 如加盐。 盐要足够长足够乱 获得的MD5码就很难查到。

 

终端代码:

$ md5 -s "abc"      给字符串abc加密

$ echo -n abc|openssl md5        给字符串abc加密  

 

二.HMAC加密

 

此加密方法须要先生成密钥,而后再对密码进行MD5和HMAC加密,数据库中须要存放当时使用的密钥和密码加密后的密文

在用户登录时 再次对填入的密码用密钥进行加密 而且还要加上当前时间(精确到分钟) 再次HMAC加密,服务器里也会拿出之前存放的密文加上时间再次加密。因此就算黑客在中途截取了密码的密文 也在能在1分钟只能破译才能有效,大大增强了安全性。服务器为了考虑到网络的延迟通常会多算一种答案,如23分过来的密码 他会把23分和22分的都算一下和用户匹配只要对上一个就容许登录。

如图 用户注册与用户登陆

---------------------------------------------------------------------------------

 

 三.base64编码

在MIME格式的电子邮件中,base64能够用来将binary的字节序列数据编码成ASCII字符序列构成的文本。使用时,在传输编码方式中指定base64。使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个字符,等号“=”用来做为后缀用途。

完整的base64定义可见RFC 1421和RFC 2045。编码后的数据比原始数据略长,为原来的4/3。

原理图

 

终端指令

先cd 找到当前目录

加密: $ base64 abc.png -o abc.txt

解密: $ base64 abc.txt -o 123.png -D

 

四.对称加密算法

优势:算法公开、计算量小、加密速度快、加密效率高、可逆

缺点:双方使用相同钥匙,安全性得不到保证

现状:对称加密的速度比公钥加密快不少,在不少场合都须要对称加密,

相较于DES和3DES算法而言,AES算法有着更高的速度和资源使用效率,安全级别也较之更高了,被称为下一代加密标准

 

nECB :电子代码本,就是说每一个块都是独立加密的

nCBC :密码块链,使用一个密钥和一个初始化向量 (IV)对数据执行加密转换

 

ECB和CBC区别:CBC更加复杂更加安全,里面加入了8位的向量(8个0的话结果等于ECB)。在明文里面改一个字母,ECB密文对应的那一行会改变,CBC密文从那一行日后都会改变。

 

ECB终端命令:

$ openssl enc -des-ecb -K 616263 -nosalt -in msg1.txt -out msg1.bin

CBC终端命令:

$ openssl enc -des-cbc -K 616263 -iv 0000000000000000 -nosalt -in msg1.txt -out msg2.bin

 

五.RSA加密

RSA非对称加密算法

非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)

公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密

特色:

非对称密码体制的特色:算法强度复杂、安全性依赖于算法与密钥可是因为其算法复杂,而使得加密解密速度没有对称加密解密的速度快

对称密码体制中只有一种密钥,而且是非公开的,若是要解密就得让对方知道密钥。因此保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就能够不须要像对称密码那样传输对方的密钥了

基本加密原理:

(1)找出两个“很大”的质数:P & Q

(2)N = P * Q

(3)M = (P – 1) * (Q – 1)

(4)找出整数E,E与M互质,即除了1以外,没有其余公约数

(5)找出整数D,使得E*D除以M余1,即 (E * D) % M = 1

通过上述准备工做以后,能够获得:

E是公钥,负责加密

D是私钥,负责解密

N负责公钥和私钥之间的联系

加密算法,假定对X进行加密

(X ^ E) % N = Y

n根据费尔马小定义,根据如下公式能够完成解密操做

(Y ^ D) % N = X

 

可是RSA加密算法效率较差,对大型数据加密时间很长,通常用于小数据。

经常使用场景:

分部要给总部发一段报文,先对报文整个进行MD5获得一个报文摘要,再对这个报文摘要用公钥加密。而后把报文和这个RSA密文一块儿发过去。

总部接收到报文以后要先肯定报文是否在中途被人篡改,就先把这个密文用私钥解密获得报文摘要,再和整个报文MD5一下获得的报文摘要进行对比 若是同样就是没被改过。

相关文章
相关标签/搜索