pastebin

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 不再有效。

Private
Wrap long lines

1 + 1 =