注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

新浪微博模拟登录过程  

2013-04-17 19:32:04|  分类: 搜索引擎 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
1.如何知道新浪微博客户端密码加密方法:在新浪某个js文件中有相应的js加密密码过程,查看新浪通行证http://login.sina.com.cn/signup/signin.php的源代码其中就可以找到该js的地址 http://login.sina.com.cn/js/sso/ssologin.js不过打开后里面的内容是加密过的,网上找个在线解密站点解密。
以下是截取的js代码中用于加密密码的部分:
ak=m(ak,pagerefer:document.referrer||""});
ak=m(ak,C.loginExtraFlag);
ak=m(ak,C.loginExtraQuery);
ak.su=sinaSSOEncoder.base64.encode(n(am));
if(C.service)
{
ak.service=C.service
}
if((C.loginType&w)&&C.servertime&&sinaSSOEncoder&&sinaSSOEncoder.RSAKey)    //加密方式一RSA2
{
   ak.servertime=C.servertime;
   ak.nonce=C.nonce;
   ak.pwencode="rsa2";
   ak.rsakv=C.rsakv;
   var ai=new sinaSSOEncoder.RSAKey();
   ai.setPublic(C.rsaPubkey,"10001");    //pubkey和10001组成加密公钥
   aj=ai.encrypt([C.servertime,C.nonce].join("\t")+"\n"+aj)
}
else
{
   if((C.loginType&ae)&&C.servertime&&sinaSSOEncoder&&sinaSSOEncoder.hex_sha1)   //加密方式二SHA1
  {
   ak.servertime=C.servertime;
   ak.nonce=C.nonce;
   ak.pwencode="wsse";
   aj=sinaSSOEncoder.hex_sha1(""+sinaSSOEncoder.hex_sha1(sinaSSOEncoder.hex_sha1(aj))+C.servertime+C.nonce)
  }
}
  ak.sp=aj;
  return ak
};
两种加密方式对应的Python实现如下:

def get_pwd_wsse(pwd, servertime, nonce): """ Get wsse encrypted password """ pwd1 = hashlib.sha1(pwd).hexdigest() pwd2 = hashlib.sha1(pwd1).hexdigest() pwd3_ = pwd2 + servertime + nonce pwd3 = hashlib.sha1(pwd3_).hexdigest() return pwd3 def get_pwd_rsa(pwd, servertime, nonce): """ Get rsa2 encrypted password, using RSA module from https://pypi.python.org/pypi/rsa/3.1.1, documents can be accessed at http://stuvel.eu/files/python-rsa-doc/index.html """ #n, e parameter of RSA public key, which is published by WEIBO.COM #hardcoded here but you can also find it from values return from prelogin status above weibo_rsa_n = 'EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443' #e, exponent parameter of RSA public key, WEIBO uses 0x10001, which is 65537 in Decimal weibo_rsa_e = 65537 message = str(servertime) + '\t' + str(nonce) + '\n' + str(pwd) #construct WEIBO RSA Publickey using n and e above, note that n is a hex string key = rsa.PublicKey(int(weibo_rsa_n, 16), weibo_rsa_e) #get encrypted password encropy_pwd = rsa.encrypt(message, key) #trun back encrypted password binaries to hex string return binascii.b2a_hex(encropy_pwd)

2.Get请求某个url,获取一些诸如:servertime、nonce、rsakv、pubkey等参数供后面post请求和加密密码使用。
  GET login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=aWNlczIwMTMlNDAxNjMuY29t&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.5)&_=1366190266106 HTTP/1.1
  请求后返回JSON格式的参数数据。
 新浪微博模拟登录过程 - changfengmingzhi - 长风明志的博客
3.POST请求:POST login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5) HTTP/1.1
   其中用户名su在提交前要经过base64加密处理;
          密码sp要经过rsa2加密处理,其中rsa加密的公钥是有pubkey和10001(十六进制)构成,加密内容为:servertime+'\t'+nonce+'\n'+pwd
 新浪微博模拟登录过程 - changfengmingzhi - 长风明志的博客
4.做一个302跳转:
新浪微博模拟登录过程 - changfengmingzhi - 长风明志的博客
5.做完跳转后,get请求跳转后的URL:
  根据返回json格式数据中的result是否为True判断登录是否成功。
新浪微博模拟登录过程 - changfengmingzhi - 长风明志的博客
 
 
 

  评论这张
 
阅读(3792)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017