请查看最新新浪微博Rsa2加密方式,登录
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.CookiePolicy;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class Sina {
/**
* @param args
*/
public static void main(String[] args) {
DefaultHttpClient client = new DefaultHttpClient();
client.getParams().setParameter("http.protocol.cookie-policy",
CookiePolicy.BROWSER_COMPATIBILITY);
client.getParams().setParameter(
HttpConnectionParams.CONNECTION_TIMEOUT, 5000);
try {
HttpPost post = new HttpPost(
"http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.19)");
String data = getServerTime();
String nonce = makeNonce(6);
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("entry", "weibo"));
nvps.add(new BasicNameValuePair("gateway", "1"));
nvps.add(new BasicNameValuePair("from", ""));
nvps.add(new BasicNameValuePair("savestate", "7"));
nvps.add(new BasicNameValuePair("useticket", "1"));
nvps.add(new BasicNameValuePair("ssosimplelogin", "1"));
nvps.add(new BasicNameValuePair("su",
encodeAccount(用户名)));
nvps.add(new BasicNameValuePair("service", "miniblog"));
nvps.add(new BasicNameValuePair("servertime", data));
nvps.add(new BasicNameValuePair("nonce", nonce));
nvps.add(new BasicNameValuePair("pwencode", "wsse"));
nvps.add(new BasicNameValuePair("sp", new SinaSSOEncoder().encode(
密码, data, nonce)));
nvps.add(new BasicNameValuePair(
"url",
"http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack"));
nvps.add(new BasicNameValuePair("returntype", "META"));
nvps.add(new BasicNameValuePair("encoding", "UTF-8"));
nvps.add(new BasicNameValuePair("vsnval", ""));
post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = client.execute(post);
String entity = EntityUtils.toString(response.getEntity());
String url = entity.substring(entity
.indexOf("http://weibo.com/ajaxlogin.php?"), entity
.indexOf("code=0") + 6);
// 获取到实际url进行连接
HttpGet getMethod = new HttpGet(url);
response = client.execute(getMethod);
entity = EntityUtils.toString(response.getEntity());
entity = entity.substring(entity.indexOf("userdomain") + 13, entity
.lastIndexOf("\""));
System.out.println(entity);
getMethod = new HttpGet("http://weibo.com/u/2745482124?topnav=1");
response = client.execute(getMethod);
entity = EntityUtils.toString(response.getEntity());
// Document doc =
// Jsoup.parse(EntityUtils.toString(response.getEntity()));
System.out.println(entity);
} catch (Exception e) {
// TODO: handle exception
}
}
private static String encodeAccount(String account) {
String userName = "";
try {
userName = Base64.encodeBase64String(URLEncoder.encode(account,
"UTF-8").getBytes());
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userName;
}
private static String makeNonce(int len) {
String x = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String str = "";
for (int i = 0; i < len; i++) {
str += x.charAt((int) (Math.ceil(Math.random() * 1000000) % x
.length()));
}
return str;
}
private static String getServerTime() {
long servertime = new Date().getTime() / 1000;
return String.valueOf(servertime);
}
}
public class SinaSSOEncoder {
private boolean i = false;
private int g = 8;
public SinaSSOEncoder() {
}
public String encode(String psw, String servertime, String nonce) {
String password;
password = hex_sha1("" + hex_sha1(hex_sha1(psw)) + servertime + nonce);
return password;
}
private String hex_sha1(String j) {
return h(b(f(j, j.length() * g), j.length() * g));
}
private String h(int[] l) {
String k = i ? "0123456789ABCDEF" : "0123456789abcdef";
String m = "";
for (int j = 0; j < l.length * 4; j++) {
m += k.charAt((l[j >> 2] >> ((3 - j % 4) * 8 + 4)) & 15) + ""
+ k.charAt((l[j >> 2] >> ((3 - j % 4) * 8)) & 15);
}
return m;
}
private int[] b(int[] A, int r) {
A[r >> 5] |= 128 << (24 - r % 32);
A[((r + 64 >> 9) << 4) + 15] = r;
int[] B = new int[80];
int z = 1732584193;
int y = -271733879;
int v = -1732584194;
int u = 271733878;
int s = -1009589776;
for (int o = 0; o < A.length; o += 16) {
int q = z;
int p = y;
int n = v;
int m = u;
int k = s;
for (int l = 0; l < 80; l++) {
if (l < 16) {
B[l] = A[o + l];
} else {
B[l] = d(B[l - 3] ^ B[l - 8] ^ B[l - 14] ^ B[l - 16], 1);
}
int C = e(e(d(z, 5), a(l, y, v, u)), e(e(s, B[l]), c(l)));
s = u;
u = v;
v = d(y, 30);
y = z;
z = C;
}
z = e(z, q);
y = e(y, p);
v = e(v, n);
u = e(u, m);
s = e(s, k);
}
return new int[] { z, y, v, u, s };
}
private int a(int k, int j, int m, int l) {
if (k < 20) {
return (j & m) | ((~j) & l);
}
;
if (k < 40) {
return j ^ m ^ l;
}
;
if (k < 60) {
return (j & m) | (j & l) | (m & l);
}
;
return j ^ m ^ l;
}
private int c(int j) {
return (j < 20) ? 1518500249 : (j < 40) ? 1859775393
: (j < 60) ? -1894007588 : -899497514;
}
private int e(int j, int m) {
int l = (j & 65535) + (m & 65535);
int k = (j >> 16) + (m >> 16) + (l >> 16);
return (k << 16) | (l & 65535);
}
private int d(int j, int k) {
return (j << k) | (j >>> (32 - k));
}
private int[] f(String m, int r) {
int[] l;
int j = (1 << this.g) - 1;
int len = ((r + 64 >> 9) << 4) + 15;
int k;
for (k = 0; k < m.length() * g; k += g) {
len = k >> 5 > len ? k >> 5 : len;
}
l = new int[len + 1];
for (k = 0; k < l.length; k++) {
l[k] = 0;
}
for (k = 0; k < m.length() * g; k += g) {
l[k >> 5] |= (m.charAt(k / g) & j) << (24 - k % 32);
}
return l;
}
}