作者linjrming (风之信使)
看板NTUE-CS99
标题Re: [闲聊] 有趣的网页
时间Wed Jul 2 02:00:17 2008
太无聊了
把之前找的资料贴一贴好了
首先先来认识一下一些函式
parseInt(string)
parseInt(string, radix)
这个函式可以把string转成数字
假如第一个字元无法转成数字则传回NaN
stringObject.substring(start)
stringObject.substring(start,stop)
从第start个位子开始读取字串到第stop个
stringObject.indexOf(searchvalue)
stringObject.indexOf(searchvalue,fromindex)
这个函式可以在字串搜索字串
并传回开始的位置
如果找不到则传回-1
^ Xor的运算子
Xor的真值表
X Y → Z
0 0 0
0 1 1
1 0 1
1 1 0
ex. 00100110
^ 10110101
-------------
00100110 ^ 10110101 = 10010011
接下来就可以开始分析程式码了
function testEncode(form) {
seed = 1;
newStr = encode(form.passwordField.value, seed)
newStr2 = encode(newStr , seed)
if(form.userName.value!='cs5801')
alert("帐号或密码错误,请重新输入!")
else if(newStr !='86msgvdt')
alert("帐号或密码错误,请重新输入!")
else
document.location = newStr2+".htm"
}
上面这段不重要 应该没人看不懂吧
重点是下面这段
function encode(inStr, seed){
seed = parseInt(seed);
var char, index, newIndex, outStr="";
var
refStr="0123456789abcdefghijklmnopqrstuvwxyz._~ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i=0; i<inStr.length; i++) {
char = inStr.substring(i, i+1)
index = refStr.indexOf(char)
newIndex = index^seed; // ^: bitwise xor operator
outStr += refStr.substring(newIndex, newIndex+1);
}
return (outStr)
}
函式一开始会进入两个值
inStr是你输入的密码 seed是testEncode()宣告的一个变数
函式第一行是要确定seed是个int
接下来几乎都是宣告的部分
再来就是第5行开始的for回圈 这个回圈要执行inStr长度的次数
回圈一开始 先把inStr字串的第i项放入char中
然後寻找refStr中出现char的位置
将index^seed放入newIndex中
最後把第newIndex位置的refStr字元加入outStr中
整个for回圈跑完就输出outStr
从以上分析可以发现
编码的重点在於Xor的运算
在testEncode()中定义seed为1
现在我假设index为0
00000000
^ 00000001
-----------
00000001 => 所以出来会是1
假设index为1
00000001
^ 00000001
-----------
00000000 => 出来为0
所以这个东西只是把最左边一位1变成0 0变成1而已
也就是说 2会变3 3会变2 以此类推
输入的东西是refStr字串的第19个 就会输出refStr的第18个
这样就能解决问题了
假如他的seed不是1 甚至不是固定值怎麽办?
很简单 在做一次Xor就好了 = =b
----------------------------------------------------
以上是正统解法
我当初是把整个网页抓下来放在自己电脑跑
改个几行程式答案就出来了
不过这解法好没品 = =a
--
◥◣ ∞ ◢◤
◢◣◤◢◣ 萃まる梦、幻、そして百鬼夜行
﹒ ▕● <◥▍
● ▕▄▄▄ ▎§
● §∕
︽ ﹨
▏▲ 伊吹の西瓜
● ◢▄▄◣ Suika Ibuki gbwind ψgbwind
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.132.162.39
1F:推 gn02254995:强者志明~~ 等等看完= = 07/02 02:26
2F:推 harry5438:oh~ fucking xor XD 07/02 10:24
3F:推 fox1412:不愧是日和大大 =口= 07/02 11:02