首页 > 资料收集 > 开心网登录密码加密C#代码

开心网登录密码加密C#代码

今天研究了一下开心网的新登录方式,密码被加密了,调用的enlogin.js。我看不懂js,所以找朋友vbxx帮我用解密了下,于是就直接用C#调用js 实现了开心网的密码加密方法。现在分享代码如下,有需要的可以直接复制直接使用,如果是转载文章,希望能加上出处。

1.新建一个txtbox,里面放上js加密方法,内容如下

function GetRPassword(key, password){
  return h(en(uen(password), key));
 }
 
 function h(msg){
  var K=[0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6];
 msg+=String.fromCharCode(0×80);
 var l=msg.length/4+2;
 var N=Math.ceil(l/16);
 var M=new Array(N);
 for(var i=0;i<N;i++){
  M[i]=new Array(16);
  for(var j=0;j<16;j++){
   M[i][j]=(msg.charCodeAt(i*64+j*4)<<24)|(msg.charCodeAt(i*64+j*4+1)<<16)|(msg.charCodeAt(i*64+j*4+2)<<8)|(msg.charCodeAt(i*64+j*4+3));
  }
 }
 M[N-1][14]=((msg.length-1)*8)/Math.pow(2,32);
 M[N-1][14]=Math.floor(M[N-1][14]);
 M[N-1][15]=((msg.length-1)*8)&0xffffffff;
 var H0=0×67452301;
 var H1=0xefcdab89;
 var H2=0x98badcfe;
 var H3=0×10325476;
 var H4=0xc3d2e1f0;
 var W=new Array(80);
 var a,b,c,d,e;
 for(var i=0;i<N;i++){
  for(var t=0;t<16;t++){
   W[t]=M[i][t];
  }
  for(var t=16;t<80;t++){
   W[t]=rotl(W[t-3]^W[t-8]^W[t-14]^W[t-16],1);
  }
  a=H0;b=H1;c=H2;d=H3;e=H4;
  for(var t=0;t<80;t++){
   var s=Math.floor(t/20);
   var T=(rotl(a,5)+f(s,b,c,d)+e+K[s]+W[t])&0xffffffff;
   e=d;
   d=c;
   c=rotl(b,30);
   b=a;
   a=T;
  }
  H0=(H0+a)&0xffffffff;H1=(H1+b)&0xffffffff;H2=(H2+c)&0xffffffff;H3=(H3+d)&0xffffffff;H4=(H4+e)&0xffffffff;
 }
 
 return tohs(H0)+tohs(H1)+tohs(H2)+tohs(H3)+tohs(H4);
 }
 
 function rotl(x, n){
  return(x<<n)|(x>>>(32-n));
 }
 
 function f(s, x, y, z){
  switch(s){
  case 0:
   return(x&y)^(~x&z);
  case 1:
   return x^y^z;
  case 2:
   return(x&y)^(x&z)^(y&z);
  case 3:
   return x^y^z;}
}

function tohs(str){
 var s=”",v;
 for(var i=7;i>=0;i–){
  v=(str>>>(i*4))&0xf;s+=v.toString(16);
 }
 
 return s;
}

function en(p, key){
 if(p==”"){
  return”";
 }
 var v=sl(p,true);
 var k=sl(key,false);
 if(k.length<4){
  k.length=4;
 }
 var n=v.length-1;
 var z=v[n],y=v[0],de=2654435769;
 var mx,e,p,q=Math.floor(6+52/(n+1)),sum=0;
 while(0<q–){
  sum=sum+de&0xffffffff;
  e=sum>>>2&3;
  for(p=0;p<n;p++){
   y=v[p+1];
   mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);
   z=v[p]=v[p]+mx&0xffffffff;
  }
  y=v[0];
  mx=(z>>>5^y<<2)+(y>>>3^z<<4)^(sum^y)+(k[p&3^e]^z);
  z=v[n]=v[n]+mx&0xffffffff;
 }
 
 return bh(v);
}

function sl(s, w){
 var len=s.length;
 var v=[];
 for(var i=0;i<len;i+=4){
  v[i>>2]=s.charCodeAt(i)|s.charCodeAt(i+1)<<8|s.charCodeAt(i+2)<<16|s.charCodeAt(i+3)<<24;
 }
 if(w){
  v[v.length]=len;
 }
 
 return v;
}

function bh(ar){
 var charHex=new Array(’0′,’1′,’2′,’3′,’4′,’5′,’6′,’7′,’8′,’9′,’a',’b',’c',’d',’e',’f');
 var str=”";
 var len=ar.length;
 for(var i=0,tmp=len<<2;i<tmp;i++){
  str+=charHex[((ar[i>>2]>>(((i&3)<<3)+4))&0xF)]+charHex[((ar[i>>2]>>((i&3)<<3))&0xF)];
 }
 
 return str;
}

function uen(str){
 str=(str+”).toString();
 return encodeURIComponent(str)
   .replace(/!/g,’%21′)
   .replace(/’/g,’%27′)
   .replace(/\(/g,’%28′)
   .replace(/\)/g,’%29′)
   .replace(/\*/g,’%2A’)
   .replace(/%20/g,’+')
   .replace(/~/g,’%7E’);
}

2. 添加com引用  

  mscrosoft script control 1.0

3. 新建一个button,在click事件写

        private void button1_Click(object sender, EventArgs e)
        {

            MSScriptControl.ScriptControlClass sc = new MSScriptControl.ScriptControlClass();
            sc.Language = “javascript”;
            sc.AddCode(textBox1.Text);
            object[] parm = new object[] { “jZF7eS4K546blfD”, “zzz8565″ };
            MessageBox.Show(sc.Run(“GetRPassword”, ref parm).ToString());
        }

4.效果图 :

通过自己计算的开心网登录后加密的密码跟正常登录的密码相同,说明张筱祥使用C#解密成功。

Popularity: 22% [?]

你可能对下面的内容也感兴趣

    分类: 资料收集 标签: 阅读:1,864
    1. 2011年5月4日16:11 | #1

      这么多代码啊……看不懂了……

    1. 本文目前尚无任何 trackbacks 和 pingbacks.

    3718150474633154929112424204136344840324513627301092612313516391742725322194423144338215828