加密方式大致分为以下几种:
--哈希(散列函数)
--MD5
--SHA1
--SHA256(512)
--对称加密算法
--DES
--3DES
--AES(高级密码标准。美国国家安全局使用的加密算法)
--非对称加密算法 RSA
很多项目中都用到了MD5,它是一种不可逆算法。相同的数据加密,得到的结果是一样的,对不同的数据加密,得到的结果是定长的(32字符),很多人以为这样就很安全了。但其实不然,不信?那把你项目中的md5之后的字符放在这里,然后点击查询,会有意想不到的收获。
然后,后来有人想到了一个方法:加盐;
所谓加盐,就是在密码后面拼接一串超级复杂的字符串,有多乱写多乱。你再去哪里查询,结果是查询不到的。但是,这也能算相对安全,为什么不安全?因为这串字符串我们这些coder是知道的,假如一些特定的情况,这个盐被泄露了,那么就跟没有加盐一样。而且盐不可以修改,修改之后,所有用户的密码前功尽弃,因为以前的加密密码是根据以前的盐生成的,盐改变了,加密之后的密码随之改变。
目前用的比较流行的是HMAC加密(基于哈希)
流程:移动端发起请求,服务端生成key,传给移动端,移动端保存然后根据key和内容进行加密,然后发送给服务器。
QQ里面的设备锁应该也是基于这种逻辑(但不一定是用的这中算法):新的一台手机登录的时候,判断有没有key,没有key就请求上一台设备的同意,同意了就将key发送给新设备。
更安全的做法是每次请求用:((密码+key).HMAC+时间戳).md5。这样服务端就能比对时间,在时间允许的范围之内允许请求权限,这样就比较安全了。