关于参数加密
对接一个项目的时候涉及到一个参数加密的过程,在此记录下讨论的两种加密方式:
MD5加密:
MD5消息摘要算法(MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5加密是一种不可逆的加密算法,不可逆加密算法的特征是加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,只有重新输入明文,并再次经过同样不可逆的加密算法处理,得到相同的加密密文并被系统重新识别后,才能真正解密。
MD5算法本质上属于超损压缩,也有说法认为它只能算作算法,不能视为加密算法。因为它并不能解密。
MD5不可逆的原因是其是一种散列函数,使用的是hash算法,在计算过程中原文的部分信息是丢失了的。
MD5用途
1.防止被篡改
1)比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
2)比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
3)SVN在检测文件是否在CheckOut后被修改过,也是用到了MD5.
2.防止直接看到明文:
现在很多网站在数据库存储用户的密码的时候都是存储用户密码的MD5值。这样就算不法分子得到数据库的用户密码的MD5值,也无法知道用户的密码。(比如在UNIX系统中用户的密码就是以MD5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成MD5值,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。)
3.防止抵赖(数字签名):
这需要一个第三方认证机构。例如A写了一个文件,认证机构对此文件用MD5算法产生摘要信息并做好记录。若以后A说这文件不是他写的,权威机构只需对此文件重新产生摘要信息,然后跟记录在册的摘要信息进行比对,相同的话,就证明是A写的了。这就是所谓的“数字签名”。
aes加密
AES 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,属于对称性加密。
微信小程序就是用的这种加密方法。
AES的加密过程(AES处理单位:字节)
加密:明文P与密钥K分组后,对每组:明文组P与密钥组K处理->轮密钥加->10轮加密->密文组
解密:对每组:密文组->轮密钥加->10轮解密->明文组
以128位密钥分组为例:加密共10轮,第1轮到第9轮的轮函数一样,包括4个操作:字节代换、行位移、列混合和轮密钥加。第十轮迭代不执行列混合。解密同理。
密钥分组:有128位,192位,256位,推荐加密轮数分别为10,12,14