English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Introduzione:
Cari fratelli, sono arrivati! Recentemente, qualcuno ha chiesto come simulare il login di Weibo per estrarre i dati, ho ascoltato in silenzio e mi sono detto a me stesso, è il momento che io, vecchio signore, esca in scena, quindi oggi ho trovato il tempo per organizzare e discutere un po'.
Prima di tutto:
Per accedere a Weibo di Sina, è necessario effettuare un login preliminare, ovvero crittografare l'account in base64, crittografare la password con RSA e inviare la richiestahttp://login.sina.com.cn/sso/prelogin.phpL'acquisizione dei parametri necessari per il login tramite un collegamento, la stringa di ritorno è come segue:
{"retcode":0,"servertime":1487292003,"pcid":"gz-9e1f24c9acdefb111e1c8078558c7d9c0bf2","nonce":"VHRDG1","pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443","rsakv":"1330428213","is_openlock":0,"lm":1,"smsurl":"https:\/\/login.sina.com.cn\/sso\/msglogin?entry=weibo&mobile=18360903574&s=ea7a2e91c5f1d6da7f42aa87fe6963d0","showpin":0,"exectime":222}
,quindi è il codice di elaborazione del prelogin:}}
/** * @author LongJin * @description Informazioni di login iniziale<br> Restituisce false se il login iniziale fallisce * @return */ public boolean preLogin(){ boolean flag = false; try { su = new String(Base64.encodeBase64(URLEncoder.encode(username, "UTF-8").getBytes())); String url = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&rsakt=mod&checkpin=1&" "client=ssologin.js(v1.4.5)&_=" + getTimestamp(); url += "&su=" + su; String content; content = HttpUtils.getRequest(client, url); System.out.println("content------------" + content); JSONObject json = JSONObject.fromObject(content); System.out.println(json); servertime = json.getLong("servertime"); nonce = json.getString("nonce"); rsakv = json.getString("rsakv"); pubkey = json.getString("pubkey"); flag = encodePwd(); } catch (UnsupportedEncodingException e) { System.out.println("Lancia l'eccezione UnsupportedEncoding"); } catch (ClientProtocolException e) { System.out.println("Lancia eccezione ClientProtocol"); } catch (IOException e) { System.out.println("Lancia eccezione IO"); } return flag; }
Inoltre:
Ottieni i parametri necessari per l'accesso e utilizza una richiesta POSThttp://login.sina.com.cn/sso/login.php,将上述预登录后处理数据作为参数代入请求,得到结果如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title>新浪通行证</title> <script charset="utf-8" src="http://i.sso.sina.com.cn/js/ssologin.js"></script> </head> <body> 正在登录 ... <script> try{sinaSSOController.setCrossDomainUrlList({"retcode":0,"arrURL":["http:\/\/passport.97973.com\/sso\/crossdomain?action=login&savestate=1518828005","http:\/\/passport.weibo.cn\/sso\/crossdomain?action=login&savestate=1"]});} catch(e){ var msg = e.message; var img = new Image(); var type = 1; img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg + '&type=' + type; }try{sinaSSOController.crossDomainAction('login',function(){location.replace('http://passport.weibo.com/wbsso/login?ssosavestate=1518828005&url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3Fframelogin%3D1%26callback%3Dparent.sinaSSOController.feedBackUrlCallBack&ticket=ST-NTUwODg3MjkxMQ==-1487292005-gz-FF56C545999F864FC6C7AB86FCA9FA4A-1&retcode=0');});} catch(e){ var msg = e.message; var img = new Image(); var type = 2; img.src = 'http://login.sina.com.cn/sso/debuglog?msg=' + msg + '&type=' + type; } </script> </body> </html>
然后用正则截取其中我们想要的部分:location.replace('')中间部分,正则表达式为:
String regex = "location.replace\\('([\\s\\S]*?)'\\);";
将正则得到的结果进行处理,如果成功则使用get请求得到的链接,登陆部分的代码如下:
/** * @author LongJin * @description 登录 * @return true:登录成功 */ public boolean login() { if(preLogin()) { String url = "http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.15)"; List<NameValuePair> parms = new ArrayList<NameValuePair>(); parms.add(new BasicNameValuePair("entry", "weibo")); parms.add(new BasicNameValuePair("geteway", "1")); parms.add(new BasicNameValuePair("from", "")); parms.add(new BasicNameValuePair("savestate", "7")); parms.add(new BasicNameValuePair("useticket", "1")); parms.add(new BasicNameValuePair("pagerefer", "http://login.sina.com.cn/sso/logout.php?entry=miniblog&r=http%3A%2F%2Fweibo.com%2Flogout.php%3Fbackurl%3D%2F")); parms.add(new BasicNameValuePair("vsnf", "1")); parms.add(new BasicNameValuePair("su", su)); parms.add(new BasicNameValuePair("service", "miniblog")); parms.add(new BasicNameValuePair("servertime", servertime + "")); parms.add(new BasicNameValuePair("nonce", nonce)); parms.add(new BasicNameValuePair("pwencode", "rsa2")); parms.add(new BasicNameValuePair("rsakv", rsakv)); parms.add(new BasicNameValuePair("sp", sp)); parms.add(new BasicNameValuePair("encoding", "UTF-8")); parms.add(new BasicNameValuePair("prelt", "182")); parms.add(new BasicNameValuePair("url", "http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack")); parms.add(new BasicNameValuePair("domain", "sina.com.cn")); parms.add(new BasicNameValuePair("returntype", "META")); try { String content = HttpUtils.postRequest(client, url, parms); System.out.println("content----------" + content); String regex = "location.replace\\('([\\s\\S]*?)'\\);";//\\(' '\\)特殊符转译 匹配('')里面的内容//location.replace([\\s\\S]*?) Pattern p = Pattern.compile(regex); Matcher m = p.matcher(content); if(m.find()) { System.out.println("ss = "+m.group()); location = m.group(1); if(location.contains("reason=")) { //Se sei arrivato a questo punto, ti auguro un errore felice errInfo = location.substring(location.indexOf("reason=") + 7); errInfo = URLDecoder.decode(errInfo, "GBK"); } else { System.out.println("location = "+location); String result = HttpUtils.getRequest(client, location);//.substring(2, location.length()-2) int beginIndex = result.indexOf("("); int endIndex = result.lastIndexOf(")"); result = result.substring(beginIndex+1, endIndex);//Estrai la stringa JSON tra parentesi //content = URLDecoder.decode(content, "UTF-8"); JSONObject jsonObject = JSONObject.fromObject(result);//Converti in json //Ottieni uniqueid+userdomain come parametri per l'accesso uniqueid = jsonObject.getJSONObject("userinfo").getString("uniqueid"); userdomain = jsonObject.getJSONObject("userinfo").getString("userdomain"); System.out.println("result--------------" + result); return true; } } } catch (ClientProtocolException e) { System.out.println("Lancia eccezione ClientProtocol"); } catch (IOException e) { System.out.println("Lancia eccezione IO"); } } return false; }
Aggiungi il codice di crittografia della password:
private static String sina_js = "var sinaSSOEncoder=sinaSSOEncoder||{};(function(){var hexcase=0;var chrsz=8;this.hex_sha1=function(s){return binb2hex(core_sha1(str2binb(s),s.length*chrsz));};var core_sha1=function(x,len){x[len>>5]|=0x80<<(24-len%32);x[((len+64>>9)<<4)+15]=len;var w=Array(80);var a=1732584193;var b=-271733879;var c=-1732584194;var d=271733878;var e=-1009589776;for(var i=0;i<x.length;i+=16){var olda=a;var oldb=b;var oldc=c;var oldd=d;var olde=e;for(var j=0;j<80;j++){if(j<16)w[j]=x[i+j];else w[j]=rol(w[j-3]^w[j-8]^w[j-14]^w[j-16],1);var t=safe_add(safe_add(rol(a,5),sha1_ft(j,b,c,d)),safe_add(safe_add(e,w[j]),sha1_kt(j)));e=d;d=c;c=rol(b,30);b=a;a=t;}a=safe_add(a,olda);b=safe_add(b,oldb);c=safe_add(c,oldc);d=safe_add(d,oldd);e=safe_add(e,olde);}return Array(a,b,c,d,e);};var sha1_ft=function(t,b,c,d){if(t<20)return(b&c)|((~b)&d);if(t<40)return b^c^d;if(t<60)return(b&c)|(b&d)|(c&d);return b^c^d;};var sha1_kt=function(t){return(t<20)?1518500249:(t<40)?1859775393:(t<60)?-1894007588:-899497514;};var safe_add=function(x,y){var lsw=(x&0xFFFF)+(y&0xFFFF);var msw=(x>>16)+(y>>16)+(lsw>>16);return(msw<<16)|(lsw&0xFFFF);};var rol=function(num,cnt){return(num<<cnt)|(num>>>(32-cnt));};var str2binb=function(str){var bin=Array();var mask=(1<<chrsz)-1;for(var i=0;i<str.length*chrsz;i+=chrsz)bin[i>>5]|=(str.charCodeAt(i/chrsz)&mask)<<(24-i%32);return bin;};var binb2hex=function(binarray){var hex_tab=hexcase?'0123456789ABCDEF':'0123456789abcdef';var str='';for(var i=0;i<binarray.length*4;i++){str+=hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8+4))&0xF)+hex_tab.charAt((binarray[i>>2]>>((3-i%4)*8))&0xF);}return str;};this.base64={encode:function(input){input=''+input;if(input=='')return '';var output='';var chr1,chr2,chr3='';var enc1,enc2,enc3,enc4='';var i=0;do{chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64;}else if(isNaN(chr3)){enc4=64;}output=output+this._keys.charAt(enc1)+this._keys.charAt(enc2)+this._keys.charAt(enc3)+this._keys.charAt(enc4);chr1=chr2=chr3='';enc1=enc2=enc3=enc4='';}while(i<input.length);return output;},_keys:'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='};}).call(sinaSSOEncoder);;(function(){var dbits;var canary=0xdeadbeefcafe;var j_lm=((canary&0xffffff)==0xefcafe);function BigInteger(a,b,c){if(a!=null)if('number'==typeof a)this.fromNumber(a,b,c);else if(b==null && 'string' !=typeof a)this.fromString(a,256);else this.fromString(a,b);}function nbi(){return new BigInteger(null);}function am1(i,x,w,j,c,n){while(--n>=0){var v=x*this[i++]+w[j]+c;c=Math.floor(v/0x4000000);w[j++]=v&0x3ffffff;return c;}function am2(i,x,w,j,c,n){var xl=x&0x7fff,xh=x>>15;while(--n>=0){var l=this[i]&0x7fff;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&0x3fffffff;}return c;}function am3(i,x,w,j,c,n){var xl=x&0x3fff,xh=x>>14;while(--n>=0){var l=this[i]&0x3fff;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&0x3fff)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&0xfffffff;}return c;}BigInteger.prototype.am=am3;dbits=28;BigInteger.prototype.DB=dbits;BigInteger.prototype.DM=((1<<dbits)-1);BigInteger.prototype.DV=(1<<dbits);var BI_FP=52;BigInteger.prototype.FV=Math.pow(2,BI_FP);BigInteger.prototype.F1=BI_FP-dbits;BigInteger.prototype.F2=2*dbits-BI_FP;var BI_RM='0123456789abcdefghijklmnopqrstuvwxyz';var BI_RC=new Array();var rr,vv;rr='0'.charCodeAt(0);for(vv=0;vv<=9;++vv)BI_RC[rr++]=vv;rr='a'.charCodeAt(0);per(vv=10;vv<36;++vv)BI_RC[rr++]=vv;rr='A'.charCodeAt(0);per(vv=10;vv<36;++vv)BI_RC[rr++]=vv;funzione int2char(n){return BI_RM.charAt(n);}funzione intAt(s,i){var c=BI_RC[s.charCodeAt(i)];return(c==null)?-1:c;}funzione bnpCopyTo(r){per(var i=this.t-1;i>=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s;}funzione bnpFromInt(x){this.t=1;this.s=(x<0)?-1:0;se(x>0)this[0]=x;altrimenti se(x<-1)this[0]=x+DV;altrimenti this.t=0;}funzione nbv(i){var r=nbi();r.fromInt(i);ritorna r;}funzione bnpFromString(s,b){var k;se(b==16)k=4;altrimenti se(b==8)k=3;altrimenti se(b==256)k=8;altrimenti se(b==2)k=1;altrimenti se(b==32)k=5;altrimenti se(b==4)k=2;altrimenti{this.fromRadix(s,b);ritorna;}this.t=0;this.s=0;var i=s.lunghezza,mi=false,sh=0;mentre(--i>=0){var x=(k==8)?s[i]&0xff:intAt(s,i);se(x<0){se(s.carattere(i)=='-')mi=true;continua;}mi=false;se(sh==0)this[this.t++]=x;altrimenti se(sh+k>this.DB){this[this.t-1]|=(x&((1<<(this.DB-sh))-1))<<sh;this[this.t++]=(x>>(this.DB-sh));}}}altrimenti this[this.t-1]|=x<<sh;sh+=k;se(sh>=this.DB)sh-=this.DB;}se(k==8&&(s[0]&0x80)!=0){this.s=-1;se(sh>0)this[this.t-1]|=((1<<(this.DB-sh))-1)<<sh;}this.clamp();se(mi)BigInteger.ZERO.subTo(this,this);}funzione bnpClamp(){var c=this.s&this.DM;mentre(this.t>0&&this[this.t-1]==c)--this.t;}funzione bnToString(b){se(this.s<0)return '-'+this.negate().toString(b);var k;se(b==16)k=4;altrimenti se(b==8)k=3;altrimenti se(b==2)k=1;altrimenti se(b==32)k=5;altrimenti se(b==4)k=2;altrimenti return this.toRadix(b);var km=(1<<k)-1,d,m=false,r='',i=this.t;var p=this.DB-(i*this.DB)%k;mentre(i-->0){se(p<this.DB&&(d=this[i]>>p)>0){m=true;r=int2char(d);}mentre(i>=0){se(p<k){d=(this[i]&((1<<p)-1))<<(k-p);d|=this[--i]>>(p+=this.DB-k);}altrimenti{d=(this[i]>>(p-=k))&km;se(p<=0){p+=this.DB;--i;}}se(d>0)m=true;se(m)r+=int2char(d);}}return m?r:'0';}funzione bnNegate(){var r=nbi();BigInteger.ZERO.subTo(this,r);return r;}function bnAbs(){return(this.s<0)?this.negate():this;}function bnCompareTo(a){var r=this.s-a.s;if(r!=0)return r;var i=this.t;r=i-a.t;if(r!=0)return r;while(--i>=0)if((r=this[i]-a[i])!=0)return r;return 0;}function nbits(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16;}if((t=x>>8)!=0){x=t;r+=8;}if((t=x>>4)!=0){x=t;r+=4;}if((t=x>>2)!=0){x=t;r+=2;}if((t=x>>1)!=0){x=t;r+=1;}return r;}function bnBitLength(){if(this.t<=0)return 0;return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));}function bnpDLShiftTo(n,r){var i;for(i=this.t-1;i>=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s;}function bnpDRShiftTo(n,r){for(var i=n;i=0;--i){r[i+ds+1]=(this[i]>>cbs)|c;c=this[i] & bm << bs; for(i = ds - 1; i >= 0; --i) r[i] = 0; r[ds] = c; r.t = this.t + ds + 1; r.s = this.s; r.clamp(); } function bnpRShiftTo(n, r) { r.s = this.s; var ds = Math.floor(n / this.DB); if (ds >= this.t) { r.t = 0; return; } var bs = n % this.DB; var cbs = this.DB - bs; var bm = (1 << bs) - 1; r[0] = this[ds] >> bs; for (var i = ds + 1; i < this.t; ++i) { r[i - ds - 1] |= (this[i] & bm) << cbs; r[i - ds] = this[i] >> bs; } if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs; r.t = this.t - ds; r.clamp(); } function bnpSubTo(a, r) { var i = 0, c = 0, m = Math.min(a.t, this.t); while (i < m) { c += this[i] - a[i]; r[i++] = c & this.DM; c >>= this.DB; } if (a.t < this.t) { c -= a.s; while (i < this.t) { c += this[i]; r[i++] = c & this.DM; c >>= this.DB; } c += this.s; } else { c += this.s; while (i < a.t) { c -= a[i]; r[i++] = c & this.DM; c >>= this.DB; } c -= a.s; } r.s = (c < 0) ? -1 : 0; if (c < -1) r[i++] = this.DV + c; else if (c > 0) r[i++] = c; r.t = i; r.clamp(); } function bnpMultiplyTo(a, r) { var x = this.abs(), y = a.abs(); var i = x.t; r.t = i + y.t; while (--i >= 0) r[i] = 0; for (i = 0; i < y.t; ++i)r[i+x.t]=x.am(0,y[i],r,i,0,x.t);r.s=0;r.clamp();if(this.s!=a.s)BigInteger.ZERO.subTo(r,r);}function bnpSquareTo(r){var x=this.abs();var i=r.t=2*x.t;while(--i>=0)r[i]=0;for(i=0;i<x.t-1;++i){var c=x.am(i,x[i],r,2*i,0,1);if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1))>=x.DV){r[i+x.t]-=x.DV;r[i+x.t+1]=1;}}if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp();}function bnpDivRemTo(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t<pm.t){if(q!=null)q.fromInt(0);if(r!=null)this.copyTo(r);return;}if(r==null)r=nbi();var y=nbi(),ts=this.s,ms=m.s;var nsh=this.DB-nbits(pm[pm.t-1]);if(nsh>0){pm.lShiftTo(nsh,y);pt.lShiftTo(nsh,r);}else{pm.copyTo(y);pt.copyTo(r);}var ys=y.t;var y0=y[ys-1];if(y0==0)return;var yt=y0*(1<<this.F1)+((ys>1)?y[ys-2]>>this.F2:0);var d1=this.FV/yt,d2=(1<<this.F1)/yt,e=1<<this.F2;var i=r.t,j=i-ys,t=(q==null)?nbi():q;y.dlShiftTo(j,t);if(r.compareTo(t)>=0){r[r.t++]=1;r.subTo(t,r);}BigInteger.ONE.dlShiftTo(ys,t);t.subTo(y,y);while(y.t<ys)y[y.t++]=0;while(--j>=0){var qd=(r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))<qd){y.dlShiftTo(j,t);r.subTo(t,r);while(r[i]<--qd)r.subTo(t,r);}}if(q!=null){r.drShiftTo(ys,q);if(ts!=ms)BigInteger.ZERO.subTo(q,q);}r.t=ys;r.clamp();if(nsh>0)r.rShiftTo(nsh,r);if(ts<0)BigInteger.ZERO.subTo(r,r);}function bnMod(a){var r=nbi();this.abs().divRemTo(a,null,r);if(this.s<0&&r.compareTo(BigInteger.ZERO)>0)a.subTo(r,r);return r;}function Classic(m){this.m=m;}function cConvert(x){if(x.s<0||x.compareTo(this.m)>=0)return x.mod(this.m);else return x;}function cRevert(x){return x;}function cReduce(x){x.divRemTo(this.m,null,x);}function cMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r);}function cSqrTo(x,r){x.squareTo(r);this.reduce(r);}Classic.prototype.convert=cConvert;Classic.prototype.revert=cRevert;Classic.prototype.reduce=cReduce;Classic.prototype.mulTo=cMulTo;Classic.prototype.sqrTo = cSqrTo; function bnpInvDigit() { if (this.t < 1) return 0; var x = this[0]; if ((x & 1) == 0) return 0; var y = x & 3; y = (y * (2 - (x & 0xf) * y)) & 0xf; y = (y * (2 - (x & 0xff) * y)) & 0xff; y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; y = (y * (2 - x * y % this.DV)) % this.DV; return (y > 0) ? this.DV - y : -y; } function Montgomery(m) { this.m = m; this.mp = m.invDigit(); this.mpl = this.mp & 0x7fff; this.mph = this.mp >> 15; this.um = (1 << (m.DB - 15)) - 1; this.mt2 = 2 * m.t; } function montConvert(x) { var r = nbi(); x.abs().dlShiftTo(this.m.t, r); r.divRemTo(this.m, null, r); if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r); return r; } function montRevert(x) { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } function montReduce(x) { while (x.t <= this.mt2) x[x.t++] = 0; for (var i = 0; i < this.m.t; ++i) { var j = x[i] & 0x7fff; var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; j = i + this.m.t; x[j] += this.m.am(0, u0, x, i, 0, this.m.t); while (x[j] >= x.DV){x[j]-=x.DV;x[++j]++;}}x.clamp();x.drShiftTo(this.m.t,x);if(x.compareTo(this.m)>=0)x.subTo(this.m,x);}function montSqrTo(x,r){x.squareTo(r);this.reduce(r);}function montMulTo(x,y,r){x.multiplyTo(y,r);this.reduce(r);}Montgomery.prototype.convert=montConvert;Montgomery.prototype.revert=montRevert;Montgomery.prototype.reduce=montReduce;Montgomery.prototype.mulTo=montMulTo;Montgomery.prototype.sqrTo=montSqrTo;function bnpIsEven(){return((this.t>0)?(this[0]&1):this.s)==0;}function bnpExp(e,z){if(e>0xffffffff||e<1)return BigInteger.ONE;var r=nbi(),r2=nbi(),g=z.convert(this),i=nbits(e)-1;g.copyTo(r);while(--i>=0){z.sqrTo(r,r2);if((e&(1<0)z.mulTo(r2,g,r);else{var t=r;r=r2;r2=t;}}return z.revert(r);}function bnModPowInt(e,m){var z;if(e<256||m.isEven())z=new Classic(m);else z=new Montgomery(m);return this.exp(e,z);}BigInteger.prototype.copyTo=bnpCopyTo;BigInteger.prototype.fromInt=bnpFromInt;BigInteger.prototype.fromString=bnpFromString;Il prototipo di BigInteger.clamp=bnpClamp;Il prototipo di BigInteger.dlShiftTo=bnpDLShiftTo;Il prototipo di BigInteger.drShiftTo=bnpDRShiftTo;Il prototipo di BigInteger.lShiftTo=bnpLShiftTo;Il prototipo di BigInteger.rShiftTo=bnpRShiftTo;Il prototipo di BigInteger.subTo=bnpSubTo;Il prototipo di BigInteger.multiplyTo=bnpMultiplyTo;Il prototipo di BigInteger.squareTo=bnpSquareTo;Il prototipo di BigInteger.divRemTo=bnpDivRemTo;Il prototipo di BigInteger.invDigit=bnpInvDigit;Il prototipo di BigInteger.isEven=bnpIsEven;Il prototipo di BigInteger.exp=bnpExp;Il prototipo di BigInteger.toString=bnToString;Il prototipo di BigInteger.negate=bnNegate;Il prototipo di BigInteger.abs=bnAbs;Il prototipo di BigInteger.compareTo=bnCompareTo;Il prototipo di BigInteger.bitLength=bnBitLength;Il prototipo di BigInteger.mod=bnMod;Il prototipo di BigInteger.modPowInt=bnModPowInt;BigInteger.ZERO=nbv(0);BigInteger.ONE=nbv(1);funzione Arcfour(){this.i=0;this.j=0;this.S=new Array();}funzione ARC4init(key){var i,j,t;per i=0;i<256;++i)this.S[i]=i;j=0;per i=0;i<256;++i){j=(j+this.S[i]+key[i%key.length])&255;t = this.S[i]; this.S[i] = this.S[j]; this.S[j] = t; this.i = 0; this.j = 0; } function ARC4next() { var t; this.i = (this.i + 1) & 255; this.j = (this.j + this.S[this.i]) & 255; t = this.S[this.i]; this.S[this.i] = this.S[this.j]; this.S[this.j] = t; return this.S[(t + this.S[this.i]) & 255]; } Arcfour.prototype.init = ARC4init; Arcfour.prototype.next = ARC4next; function prng_newstate() { return new Arcfour(); } var rng_psize = 256; var rng_state; var rng_pool; var rng_pptr; function rng_seed_int(x) { rng_pool[rng_pptr++] ^= x & 255; rng_pool[rng_pptr++] ^= (x >> 8) & 255; rng_pool[rng_pptr++] ^= (x >> 16) & 255; rng_pool[rng_pptr++] ^= (x >> 24) & 255; if (rng_pptr >= rng_psize) rng_pptr -= rng_psize; } function rng_seed_time() { rng_seed_int(new Date().getTime()); } if (rng_pool == null) { rng_pool = new Array(); rng_pptr = 0; var t; while (rng_pptr < rng_psize) { t = Math.floor(65536 * Math.random()); rng_pool[rng_pptr++] = t >>> 8; rng_pool[rng_pptr++] = t & 255; } rng_pptr = 0; rng_seed_time(); } function rng_get_byte() { if (rng_state == null) ""{rng_seed_time();rng_state=prng_newstate();rng_state.init(rng_pool);for(rng_pptr=0;rng_pptr =0&&n>0){var c=s.charCodeAt(i--);if(c<128){ba[--n]=c;}else if((c>127)&&(c<2048)){ba[--n]=(c&63)|128;ba[--n]=(c>>6)|192;}else{ba[--n]=(c&63)|128;ba[--n]=((c>>6)&63)|128;ba[--n]=(c>>12)|224;}}ba[--n]=0;var rng=new SecureRandom();var x=new Array();while(n>2){x[0]=0;while(x[0]==0)rng.nextBytes(x);ba[--n]=x[0];}ba[--n]=2;ba[--n]=0;return new BigInteger(ba);}function RSAKey(){this.n=null;this.e=0;this.d=null;this.p=null;this.q=null;this.dmp1=null;this.dmq1=null;this.coeff=null;}function RSASetPublic(N,E){if(N!=null&&E!=null&&N.length>0&&E.length>0){this.n=parseBigInt(N,16);this.e=parseInt(E,16);}else alert('Invalid RSA public key');}function RSADoPublic(x){return x.modPowInt(this.e,this.n);}function RSAEncrypt(text){var m=pkcs1pad2(text,(this.n.bitLength()+7)>>3);if(m==null)return null;var c=this.doPublic(m);if(c==null)return null;var h=c.toString(16);if((h.length&1)==0)return h;else return '0'+h;}RSAKey.prototype.doPublic=RSADoPublic;RSAKey.prototype.setPublic=RSASetPublic;RSAKey.prototype.encrypt=RSAEncrypt;this.RSAKey=RSAKey;}.call(sinaSSOEncoder);function getpass(pwd,servicetime,nonce,rsaPubkey){var RSAKey=new sinaSSOEncoder.RSAKey();}RSAKey.setPublic(rsaPubkey,'10001');var password=RSAKey.encrypt([servicetime,nonce].join('\\t')+'\\n'+pwd);return password;}
/** * La password viene crittografata con RSA * Restituisce false se l'加密 fallisce * @return */ private boolean encodePwd() { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("javascript"); try { // Utilizza la crittografia js, RSA, chiama metodo interno js. In questo esempio utilizzo una stringa, ma può essere direttamente inserita in un file e letta, come indicato nei commenti di seguito. se.eval(sina_js); // Chiamata a funzione interna js per la crittografia if (se instanceof Invocable) { Invocable iv = (Invocable) se; sp = (String) iv.invokeFunction("getpass", this.password, this.servertime, this.nonce, this.pubkey); } /* FileReader fr = new FileReader("E:\\encoder.js"); se.eval(fr); Invocable invocableEngine = (Invocable) se; String callbackvalue = (String) invocableEngine.invokeFunction("encodePwd", pubkey, servertime, nonce, password); sp = callbackvalue;*/ return true; } catch (ScriptException e) { // TODO Blocco intercettore generato automaticamente //e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Blocco intercettore generato automaticamente //e.printStackTrace(); } errInfo = "Fallimento dell'加密 della password!"; return false; } /** * @author LongJin * @description Restituisce l'informazione di errore * @return */ public String getErrInfo() { return errInfo; }
La parte di login è praticamente completata.
Infine, procediamo con il test di login e il recupero dei dati:
public static void main(String[] args) throws ClientProtocolException, IOException { SinaWeibo weibo = new SinaWeibo("**", "***"); //账号密码在此就不透露了 if(weibo.login()) {}} System.out.println("Login riuscito!"); InputStream con= HttpUtils.getRequests(client, "http://weibo.com/u/"+uniqueid+userdomain);//Richiede lo stream di input della pagina personale String cont = readStreamByEncoding(con, "UTF-8");//Converte lo stream di input in una stringa String sb =HttpUtils.getText(cont);//Ottiene la parte di contenuto text tramite jsoup //readStreamOutFileByEncoding(sb); è anche possibile scrivere il contenuto ottenuto nel file } else { System.out.println("Login fallito!"); } }
Il risultato ottenuto è:
Il risultato ottenuto è: #text--------------Ho votato per l'opzione "Yi Jianlian". #MVPnativo# La selezione del giocatore più valioso (MVP) della stagione regolare è composta dai membri delle unità del Comitato delle notizie della CBA, dai rappresentanti dei media locali suggeriti dalle società sportive, e dalla Cina di Sina, che ha un voto. Invieremo l'opinione dei fan alla CBA. Qual è il MVP nativo della stagione R? ????
La registrazione è completata, spero ci siano meno difetti.
Questo è tutto il contenuto dell'articolo, speriamo che il contenuto di questo articolo possa essere di qualche aiuto per il tuo studio o lavoro, e speriamo anche di ricevere molto sostegno per il tutorial Yana!
Dichiarazione: il contenuto di questo articolo è stato raccolto da Internet, di proprietà del rispettivo proprietario. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, questo sito non detiene il diritto di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, sei pregato di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare e fornire prove pertinenti. Una volta verificata, questo sito cancellerà immediatamente i contenuti sospetti di violazione del copyright.