Re: [閒聊] 有趣的網頁
太無聊了
把之前找的資料貼一貼好了
首先先來認識一下一些函式
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
推
07/02 02:26, , 1F
07/02 02:26, 1F
推
07/02 10:24, , 2F
07/02 10:24, 2F
推
07/02 11:02, , 3F
07/02 11:02, 3F
討論串 (同標題文章)