关于用户密码的简单加密(DES+MD5)与复杂加密(自己想的)

来源:互联网 发布:vscode 函数参数提示 编辑:程序博客网 时间:2024/04/27 21:53

 

                                                                                               用户信息的加密    

需要传递的参数:

  用户信息user(可以将用户的信息以json的形式)(DES加密后):比如是一串字符串DESString
  时间戳(因为FES需要的密钥是16位,时间戳只有10位,那么再增加一个字符串(可自定义)):
  MD5:这个是用DES加密过后的String,再次用MD5加密一次,只是为了防止请求的信息在中途被人截取串改




解密:
if ( MD5.md5(user).equals(md5)) {
String aaa = new DES().decrypt(user, time + "breakA");}


加密:
我就不写了,太简单了,就是根据解密反向的算一次就行!




PS:这个算是最简单的加密方式,我自己想出一种复杂一点的加密方式:用3层动态加密,分布式存储密码,并用热推计算,(尼玛感觉真心的高安全,都快连自己都找不到密码了),那我就简单的说说这个牛逼的加密思路:
1首先,我们在客户端拿到mac(TC)地址或者imei号(手机)(作用是与该用户绑定)
2拿到请求的时间sendTime(作用是于该小段时间绑定),作用为本次密码为5分钟内失效(时间可自定义)
3准备三台服务器
4开始做加密的过程:
          4.1:首先用户输入帐号和密码之后,我们先拿到以下几个参数:1   name(帐号)2 pass(密码)
3 mac或者imei   4当前时间戳 5一个一位随机数
          4.2:拿到用户和密码后进行MD5,得到16位的数字,取imei号的后8位+当前时间戳的后8位(因为前面两位表示年份意义不大就从后面截取)=混淆值(也叫密钥),然后用DES加密(MD5为需要加密的值,混淆值为密钥),得到一个String(比如说值是:abcdefjhijk123456)之后分为3份,分别放到3个参数中:A=一位随机数+abcdef,B=jhijkl123456,C=一位随机数+abcdefjhijk123456 然后将abc的值分别再次ras加密,再传送给3个服务器(这样做的目的有两点:1就算黑客截获了我一个请求,也没用,2 就算3个服务器其中一个密码丢失我也能根据另外两个密码计算出第3个密码),最后在发请求的时候我们对每台服务器都发送3次不同的(另外两次为假请求),(目的就算你截获我所有服务器的请求,也不知道我哪个请求里面的参数为真实参数)。
最后:这种加密算法基本可以百分之99的安全!
优点:
1不怕暴力碰撞,因为密码在三个服务器上
2不怕请求信息被截获,就算被拦截,我是向3哥服务器发送请求,
3就算三个请求都被拦截,我会同时向三个服务器每个都发3条请求(其中有两条假请求),另外用当前时间戳,可在服务器判断该请求与时间字段是否在30s内时间差,超过就视为无效,也就是每次动态生成的密码只有30s的有效期,在客户获取我的所有请求,然后去尝试18种可能时,以失效(当然其实服务器端可以判断其他6条假请求,一旦有假请求整个密码失效(或者是更好的处理方式))
4在数据库中存放MD5的密码,这样出了客户自己没有人知道他的密码,并且3个服务器还有一点好处就是,就算其中一个服务器挂了,可以依赖另外两个服务器的密码推算出第3个密码。
0 0
原创粉丝点击