1.MD5消息摘要算法
(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
MD5应用
一致性验证
比如下载软件之后,对比MD5码,能够检测文件有没有被篡改,软件下载站、论坛数据库、系统文件安全等方面应用广泛。
数字签名
防止被“篡改”,写一个文档,记录MD5的值,然后别人篡改MD5值就会发生改变。
安全访问认证
MD5还广泛用于操作系统的登陆认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面。如在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。
算法原理
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
2.base64 算法
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看RFC2045~RFC2049,上面有MIME的详细规范。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。
应用
Base64编码可用于在HTTP环境下传递较长的标识信息,将一个较长的一个标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。采用Base64编码不仅比较简短,同时也具有不可读性,即所编码的数据不会被人用肉眼所直接看到。
3.aes高级加密标准
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。
Rijndael密码的设计力求满足以下3条标准:
① 抵抗所有已知的攻击。
② 在多个平台上速度快,编码紧凑。
③ 设计简单。
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
详细:https://blog.csdn.net/gulang03/article/details/81175854
SHA-1
SHA-1(英语:Secure Hash Algorithm 1,中文名:安全散列算法1)是一种密码散列函数
已被破解
基于http的加密方案
1、敏感信息的不可见性
使用http协议传输数据很容易被抓包监听传输内容,如果这些数据中存在敏感信息的话,风险太大了。因此我们需要对我们的传输数据进行一定的加密处理
简单的方案就是对传输数据使用Base64方法转码
比较常见的做法是,发送方和接收方彼此约定密钥,发送方发送时用密钥对数据加密,接收方用密钥对数据解密。使用aes;
比如AES128加密算法
2.防止数据被篡改
用签名!用签名!用签名!重要的事情说三遍?例如:当数据被封装好后,我们可以用md5算法计算出待传输数据的摘要字符串作为签名。当服务器接受到数据后,同样使用md5对数据做摘要,同请求报文中的签名作比较,若不一致则说明该http请求数据已被篡改 。
1、无法轻易的根据签名推反推出当前签名所采用的算法;
2、签名算法的复杂性、可靠性;
3、不要直接对传输数据作签名,可以先对请求数据作摘要,再使用加密算法生成签名,既可以提升效率也在一定程度上提高了安全性。
3.http请求的真实性
有很多方案可以保证http请求的真实性。比如使用token来进行身份验证,可以借鉴微信的身份验证方案或者jwt实现。本次我们只做了简单的处理,在http请求头中设置了一个时间戳,当服务器接收到数据后,会取出http请求中的时间戳,同时与服务器当前时间作比较。若时间间隔过大,则认为该请求是不真实的,直接拒绝并返回!
基于websocket的加密方案
1.protobuff +AES加密
protobuf是google团队开发的用于高效存储和读取结构化数据的工具。