新浪微博Rsa2加密方式,登录

本文介绍了如何使用RSA2加密方式处理新浪微博的登录过程,包括关键的JavaScript加密代码示例,涉及getJs()和login()方法中的密码加密部分。
摘要由CSDN通过智能技术生成

新浪微博的密码加密方式变了,换成了rsa2,下面把关键代码贴出。

public static void login(String u, String p) {

		
		DefaultHttpClient client = new DefaultHttpClient();

		try {
			/**获得rsaPubkey,rsakv,servertime等参数值,此获取参数值的方法的形式,要感谢网上一大哥发的帖子**/
			HashMap<String, String> params = preLogin(encodeAccount(u),client);
			
			/********登录操作*********/
			HttpPost post = new HttpPost(
					"http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.4.5)");
			post
					.setHeader("Accept",
							"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
			post
					.setHeader("User-Agent",
							"Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1");

			post.setHeader("Accept-Language", "zh-cn,zh;q=0.5");
			post.setHeader("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");
			post.setHeader("Referer",
					"http://weibo.com/?c=spr_web_sq_firefox_weibo_t001");
			post.setHeader("Content-Type", "application/x-www-form-urlencoded");

			

			String nonce = makeNonce(6);

			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
			nvps.add(new BasicNameValuePair("encoding", "UTF-8"));
			nvps.add(new BasicNameValuePair("entry", "weibo"));
			nvps.add(new BasicNameValuePair("from", ""));
			nvps.add(new BasicNameValuePair("gateway", "1"));
			nvps.add(new BasicNameValuePair("nonce", nonce));
			nvps.add(new BasicNameValuePair("pagerefer", "http://i.firefoxchina.cn/old/"));
			nvps.add(new BasicNameValuePair("prelt", "111"));
			nvps.add(new BasicNameValuePair("pwencode", "rsa2"));
			nvps.add(new BasicNameValuePair("returntype", "META"));
			nvps.add(new BasicNameValuePair("rsakv", params.get("rsakv")));
			nvps.add(new BasicNameValuePair("savestate", "0"));
			nvps.add(new BasicNameValuePair("servertime", params.get("servertime")));

			nvps.add(new BasicNameValuePair("service", "miniblog"));
			
			/******************** *加密密码 ***************************/
			ScriptEngineManager sem = new ScriptEngineManager();
			ScriptEngine se = sem.getEngineByName("javascript");
			
		    se.eval(getJs());
		    String pass = "";
		  
		    if (se instanceof Invocable) {
				Invocable invoke = (Invocable) se;
				// 调用preprocess方法,并传入两个参数密码和验证码

				pass = invoke.invokeFunction("getpass",
						p, params.get("servertime"), nonce,params.get("pubkey")).toString();
				
				System.out.println("c = " + pass);
			}
			
			
			
			
			
			nvps.add(new BasicNameValuePair("sp",pass));
			nvps.add(new BasicNameValuePair("su", encodeAccount(u)));
			nvps
			.add(new BasicNameValuePair(
					"url",
					"http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"));
			
			nvps.add(new BasicNameValuePair("useticket", "1"));
		
			nvps.add(new BasicNameValuePair("vsnf", "1"));
			

			post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

			HttpResponse response = client.execute(post);

			String entity = EntityUtils.toString(response.getEntity());

			if (entity.replace("\"", "").indexOf("retcode=0") > -1) {
				String url = entity.substring(entity
						.indexOf("http://weibo.com/sso/login.php?"), entity
						.indexOf("code=0")+6 );
				
				
				String strScr = "";      
				String nick = "暂无";     //昵称

				// 获取到实际url进行连接
				HttpGet getMethod = new HttpGet(url);
				response = client.execute(getMethod);
				entity = EntityUtils.toString(response.getEntity());
		
				nick = entity.substring(entity.indexOf("displayname") + 14,
						entity.lastIndexOf("userdomain") - 3).trim();
				
				url = entity.substring(entity.indexOf("userdomain") + 13,
						entity.lastIndexOf("\""));
				getMethod = new HttpGet("http://weibo.com/"+url);
				response = client.execute(getMethod);
				entity = EntityUtils.toString(response.getEntity());
				
				System.out.println(entity);
				

			}

		} catch (Exception e) {
			e.printStackTrace();
			
			
		}

		
	}
	
	
	/** 
     * 根据URL,get网页 
     *  
     * @param url 
     * @throws IOException 
     */  
    private static String get(String url,DefaultHttpClient client) throws IOException {  
        HttpGet get = new HttpGet(url);  
        HttpResponse response = client.execute(get);  
        System.out.println(response.getStatusLine());  
        HttpEntity entity = response.getEntity();  
        String result = dump(entity);  
        get.abort();  
        return result;  
    }  
  
    /** 
     * 新浪微博预登录,获取密码加密公钥 
     *  
     * @param unameBase64 
     * @return 返回从结果获取的参数的哈希表 
     * @throws IOException 
     */  
    private static HashMap<String, String> preLogin(String unameBase64,DefaultHttpClient client)  
            throws IOException {  
        String url = "http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.5)&_=" + "_=" + new Date().getTime();  
        return getParaFromResult(get(url,client));  
    }  
    
    /** 
     * 从新浪返回的结果字符串中获得参数 
     *  
     * @param result 
     * @return 
     */  
    private static HashMap<String, String> getParaFromResult(String result) {  
        HashMap<String, String> hm = new HashMap<String, String>();  
        result = result.substring(result.indexOf("{") + 1, result.indexOf("}"));  
        String[] r = result.split(",");  
        String[] temp;  
        for (int i = 0; i < r.length; i++) {  
            temp = r[i].split(":");  
            for (int j = 0; j < 2; j++) {  
                if (temp[j].contains("\""))  
                    temp[j] = temp[j].substring(1, temp[j].length() - 1);  
            }  
            hm.put(temp[0], temp[1]);  
        }  
        return hm;  
    }  
    
    /**  
     * 打印页面  
     *   
     * @param entity  
     * @throws IOException  
     */  
    private static String dump(HttpEntity entity) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(  
                entity.getContent(), "utf8"));  
        return IOUtils.toString(br);  
    }  
	
	//rsa2加密
	public static String getJs() {
		String 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=
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值