• 曾经做的一道 js 题 - [椒图之门 Code]

    2009-06-30

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://fuckui.net/logs/41716759.html

    <script>

    var pass=new Array()
    var t3=""
    var lim=9
    pass[0]="CMG2uMcY5CHS7tk"
    pass[1]="75DtE9jchn7QCTL"
    pass[2]="cwYSbNm8gMUFh3l"
    pass[3]="76OgiilqjKew6Kx"
    pass[4]="9iBERc2WGbKAvHky"
    pass[5]="18iBERc2WGbKAvHk"


    var extension=".html"
    var enablelocking=0
    var numletter="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    var temp3=''
    var cur=0


    function max(which){
    return (pass[Math.ceil(which)+(3&15)].substring(0,1))//根据传送过来的Math.LOG10E计算应为pass[4].substring(0,1),查看数组pass4,得到返回值为9(注意因为提交值固定为Math.LOG10E所以其实这部分是花指令就为为了返回一个9)
    }

    function testit(input){
    temp=numletter.indexOf(input)//返回输入的字符在numletter的位置,从0开始算。(0-61)
    var temp2=temp^parseInt(pass[phase1-1+(1|3)].substring(0,2))//pass[5].substring(0,2),temp2=temp^18(按位异或)
    temp2=numletter.substring(temp2,temp2+1)//根据算得的temp在numletter中取字段

    //对应如下
    //0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
    //ijghmnklqropuvst23016j45ab89efcd0PMNSTQRWXUV  YZyzwxCDABGHEFKL

    return (temp2)
    }


    function submitentry(){
    t3=''
    verification=document.password1.password2.value//将密码赋值给verification
    phase1=Math.ceil(Math.random())-6+(2<<2)//随机0-1小数,phase1=1-6+8,phase1为3
    var indicate=true
    for (i=(1&2);i<window.max(Math.LOG10E);i++)//i=0,Math.LOG10E是以10为底的e的对数,为0.4342944819032518,e是常量e自然对数的底,调用函数max()处理Math.LOG10E,i递加循环。处理后应为 for (i=0;i<9;i++)
    t3+=testit(verification.charAt(i))//i=9,循环读取密码交给函数testit处理。
    for (i=(1&2);i<lim;i++){//还是i=0;i<9;i++

    //其实可以再这里简单加一句alert(pass[phase1+Math.round(Math.sin(Math.PI/2)-1)].charAt(i))来快速获取密文
    //或者直接加一句alert(pass[3].charAt(i)),因为按位异或的逆运算还是按位异或,所以可以直接获得需要的密码   numletter.substring((numletter.indexOf(pass[3].charAt(i)))^18,((numletter.indexOf(pass[3].charAt(i)))^18)+1)
    //alert(pass[3].charAt(i))弹出密文
    //alert(numletter.substring((numletter.indexOf(pass[3].charAt(i)))^18,((numletter.indexOf(pass[3].charAt(i)))^18)+1))弹出密码

    if (t3.charAt(i)!=pass[phase1+Math.round(Math.sin(Math.PI/2)-1)].charAt(i))//最后pass[3+0].charAt(9),判断返回值是否为76Ogiilqj,根据上面函数得到密码为lkw200781。
    indicate=false
    }
    if (verification.length!=window.max(Math.LOG10E))//判断是否为9位
    indicate=false
    if (indicate)
    window.location=verification+extension//取密码+htm为跳转地址
    else
    alert("密码错误,请再输入!")
    }

    //var p="";
    //for (var n=0;n<pass[3].length;n++){
    //    for(var i=0;i<62;i++){
    //        var tp1 = numletter.substring(i,i+1);
    //        var tp2 = i^18;
    //        var tp3 = numletter.substring(tp2,tp2+1)
    //        var tp4 = pass[3].substring(n,n+1);
    //        if (tp3 == tp4){p += tp1;break;}
    //    }
    //}
    //document.password1.password2.value = p.substring(0,9);


    </script>
    <table border="1" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFBD">
      <tr>
        <td width="100%">
        <form name="password1"><div align="center"><center><p><strong>Enter password: </strong><input
          type="text" name="password2" size="15"><br>
          <input type="button" value="点击进入" onClick="submitentry()"></p>
          </center></div>
        </form>
        </td>
      </tr>
    </table>
    这个东东的解密关键在于抓住验证的地方来反推,其实主要是看知不知道 按位异或(XOR) 的逆运算。