Paste
#82140: Untitled ASCII paste by 203.206.207.72
动态加密法:
1 - 主机随机生成一个动态字符串 eg login_salt = md5(rand().time().$_SERVER[REMOTE_IP].$_SERVER['USER_AGENT'])
2 - 把<1>通过 jQuery “分开”发送到网页中,事先没有跟网页其他内容一起发送
3 - 登入页面:
用名:。。。。
密码:。。。。
登入按钮
《1. 动态字符串 login_salt》-- html source code 没有看到,但是 chrome html inspector 还是可以看到的。
4 - 登入按钮激发:启动JS:
密码: passwordA = md5(md5(password).password)
passwordB = sha256(password,username,login_salt) 加密
5 - 主机收到:username, 加密后的 passwordB 进行解密, 得到 passwordA
6 - 主机立即删除 login_salt ,万一 login_salt 被中间人员获得,已经无效。
7 - 进入数据库比较 密码是否一致。
8 - 数据库所存放的密码是:
passwordC1 = enc(passwordA, time(), passwordA) -- 其中 salt = passwordA
也就是每个用户的 salt 都是他自己 md5() 后的密码,如果事先不知道原始密码,是不知道 salt 的。
8 - 密码校对符合,数据库重新生成密码保存到数据库里: passwordC2 = end(passwordA, time(), passwordA)
由于 time() 是个变量,每次登入后,密码都有新的值,保存到数据库里面,原来的 passwordC1 不再有效。