iOS逆向(2)-密码学(Hash&对称加密)

在上一篇文章,讲述了非对称加密,也就是RSA的数据原理和简单实用,那么在这篇文章将要讲述的就是对称加密,其中以Hash(散列算法,哈希函数)最为广为人知。程序员

Hash,通常翻译作“散列”,也有直接音译为“哈希”的,就是把任意长度的输入经过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间一般远小于输入的空间,不一样的输入可能会散列成相同的输出,因此不可能从散列值来肯定惟一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。算法

接下来本文会从如下几点进行阐述:安全

  • Hash的特色
  • Hash的用途
  • 对称加密

一、Hash的特色

①、算法是公开的
②、对相同数据运算,获得的结果是同样的
③、对不一样数据运算,如MD5获得的结果默认是128位,32个字符(16进制标识)。
④、这玩意无法逆运算
⑤、信息摘要,信息“指纹”,是用来作数据识别的。服务器

二、Hash的用途

①、用户密码的加密
②、搜索引擎
③、版权
④、数字签名函数

下面概述密码加密和数字签名的内容网站

一、密码加密

Step 1

密码加密须要确保服务端没有保留保存用户的明文密码,因此过程很安全的RSA就不适合用户密码加密。搜索引擎

Step 2 普通HASH

普通的Hash由于存在散列碰撞的问题,因此简单的对密码HASH(例如MD5),确定不够安全。推荐网站:反MD5网站加密

Step 3 固定盐

既然简单的Hash不安全那么进一步能够想到将密码经过固定的算法转换一次,在进行Hash,也就是咱们俗称的加盐。这种方法看似安全,但因为算法固定,那么实际上接触过这个算法的人员仍是蛮多的,就好比写这串算法的程序员,一旦程序员离职,那么算法也就变的不在安全。spa

Step 4 动态盐(HMAC)

固定的算法不行,那么就改为动态的算法,算法参数由服务器针对我的下发,那么不管谁的离职也都不影响算法的私密性。这样虽然保护了用户的明文密码,可是黑客经过中间人攻击的形式仍是能够获取服务器返回给咱们的用户token,那么黑客仍是能够每次经过这个token来获取该用户的信息,因此仍是不够安全。翻译

Step 5 动态盐(HMAC)+ 时间戳

最后,就是要让每次用户的token不同,那么能够采用,动态盐+时间戳的方式进行最终的验证。 也就是((HMAC哈希值)+”201902281250”).md5 最终服务端用也用一样的的方式校验,惟一不同的是考虑到服务传递的延时,时间戳也要考虑到上一分钟的状况。

动态盐+时间戳.png

二、数字签名

一张图讲解数字签名

数字签名.png

三、对称加密

对称加密含义

经常使用的对称加密分为三种:

方式 含义
DES 数据加密标准(用得少,由于强度不够)
3DES 使用3个密钥,对相同的数据执行3次加密,强度加强
AES 高级密码标准

其中AES为如今的的主流加密方式,AES有具体分为ECB和CBC两种加密模式: ECB(Electronic Code Book):电子密码本模式。每一块数据,独立加密。 最基本的加密模式,也就是一般理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放攻击,通常状况下不多用。

CBC(Cipher Block Chaining):密码分组连接模式。使用一个密钥和一个初始化向量[IV]对数据执行加密。 明文被加密前要与前面的密文进行异或运算后再加密,所以只要选择不一样的初始向量,相同的密文加密后会造成不一样的密文,这是目前应用最普遍的模式。CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但若是一个分组丢失,后面的分组将所有做废(同步错误)。

特色:CBC能够有效的保证密文的完整性,若是一个数据块在传递是丢失或改变,后面的数据将没法正常解密。

对称加密终端命令:

加密:

// AES(ECB)加密“hello”字符串
$ echo -n hello | openssl enc -aes-128-ecb -K 616263 -nosalt | base64
// AES(CBC)加密“hello”字符串
$ echo -n hello | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt | base64
复制代码

解密:

// AES(ECB)解密
$ echo -n d1QG4T2tivoi0Kiu3NEmZQ== | base64 -D | openssl enc -aes-128-ecb -K 616263 -nosalt –d
// AES(CBC)解密
$ echo -n u3W/N816uzFpcg6pZ+kbdg== | base64 -D | openssl enc -aes-128-cbc -iv 0102030405060708 -K 616263 -nosalt –d
复制代码

相关文章
相关标签/搜索