package util.mygametools.qq;
import static util.mygametools.qq.MD5Security.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
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.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.*;
public class QQcar {
public static final String QQNUM = "10000"; //QQ行号码
public static final String PASSWORD = "password"; //密码
private static DefaultHttpClient httpclient = new DefaultHttpClient();
private static boolean loginFlag = false;
private static List<Cookie> cookies;
private static HttpResponse response;
private static HttpGet request;
private static String verifyString;
private static String verifySession;
private static void getVerifyImage() throws Exception{
String url = "http://ptlogin2.qq.com/getimage?aid=8000108&0.7022592303274631";
HttpGet httpget = new HttpGet(url);
httpget.addHeader("Cookie", "");
httpget.setHeader("Accept", "text/html, */*");
httpget.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
//httpget.addHeader("Connection", "close");
//httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20")
response = httpclient.execute(httpget);
Header[] headers = response.getHeaders("Set-Cookie");//.getAllHeaders();
for(Header h : headers){
System.out.println(h);
}
verifySession = headers[0].getValue().split(";|=")[1];
InputStream in = response.getEntity().getContent();
File verifyFile = new File(QQcar.class.getResource("output").getPath() + "/verifycode.jpg");
FileOutputStream out = new FileOutputStream(verifyFile);
byte[] buf = new byte[1024];
while(in.read(buf) != -1){
out.write(buf);
}
out.flush();
System.out.println("验证码图片已生成。路径:" + verifyFile.getCanonicalPath());
System.out.println("请输入验证码:");
verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
while(verifyString.length() != 4){
System.out.println("验证码长度有误,请输入4位验证码:");
verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
}
}
public static void doLogin() throws Exception{
if(!loginFlag){
getVerifyImage();
HttpPost httpost = new HttpPost("http://ptlogin2.qq.com/login");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("u", QQNUM));
nvps.add(new BasicNameValuePair("p", md5( md5_3(PASSWORD) + verifyString.toUpperCase())));
nvps.add(new BasicNameValuePair("verifycode", verifyString));
nvps.add(new BasicNameValuePair("aid", "8000108"));
nvps.add(new BasicNameValuePair("u1", "http://imgcache.qq.com/qzone/v5/loginsucc.html"));
nvps.add(new BasicNameValuePair("fp", "loginerroralert"));
nvps.add(new BasicNameValuePair("h", "1"));
nvps.add(new BasicNameValuePair("ptredirect", "0"));
nvps.add(new BasicNameValuePair("ptlang", "0"));
nvps.add(new BasicNameValuePair("from_ui", "1"));
nvps.add(new BasicNameValuePair("dumy", "1"));
httpost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
httpost.setHeader("Cookie", "verifysession=" + verifySession + ";");
httpost.setHeader("Referer", "http://ui.ptlogin2.qq.com/cgi-bin/login?link_target=blank&target=self&appid=8000108&qlogin_jumpname=vipmyqq&f_url=loginerroralert&qlogin_auto_login=1&s_url=http%3A//imgcache.qq.com/qzone/v5/loginsucc.html&qlogin_param=jump_url%3D");
httpost.setHeader("Accept", "text/html, */*");
httpost.removeHeaders("Cookie2");
httpost.removeHeaders("Expect");
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
cookies = httpclient.getCookieStore().getCookies();
if (cookies.size() < 3) {
System.err.println("登录失败...");
loginFlag = false;
} else {
System.out.println("登录成功...");
for(Cookie c : cookies){
System.out.println(c);
}
loginFlag = true;
}
}
}
public static void main(String[] args) throws Exception{
doLogin();
}
}
package util.mygametools.qq;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Security {
private final static char[] hexDigits = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
private static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
int t;
for (int i = 0; i < 16; i++) {
t = bytes[i];
if (t < 0)
t += 256;
sb.append(hexDigits[(t >>> 4)]);
sb.append(hexDigits[(t % 16)]);
}
return sb.toString();
}
public static String md5(String input) throws Exception {
return code(input, 32);
}
public static String code(String input, int bit) throws Exception {
try {
MessageDigest md = MessageDigest.getInstance(System.getProperty(
"MD5.algorithm", "MD5"));
if (bit == 16)
return bytesToHex(md.digest(input.getBytes("utf-8")))
.substring(8, 24);
return bytesToHex(md.digest(input.getBytes("utf-8")));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new Exception("Could not found MD5 algorithm.", e);
}
}
public static String md5_3(String b) throws Exception{
MessageDigest md = MessageDigest.getInstance(System.getProperty(
"MD5.algorithm", "MD5"));
byte[] a = md.digest(b.getBytes());
a = md.digest(a);
a = md.digest(a);
return bytesToHex(a);
}
}
import static util.mygametools.qq.MD5Security.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
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.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import java.io.*;
public class QQcar {
public static final String QQNUM = "10000"; //QQ行号码
public static final String PASSWORD = "password"; //密码
private static DefaultHttpClient httpclient = new DefaultHttpClient();
private static boolean loginFlag = false;
private static List<Cookie> cookies;
private static HttpResponse response;
private static HttpGet request;
private static String verifyString;
private static String verifySession;
private static void getVerifyImage() throws Exception{
String url = "http://ptlogin2.qq.com/getimage?aid=8000108&0.7022592303274631";
HttpGet httpget = new HttpGet(url);
httpget.addHeader("Cookie", "");
httpget.setHeader("Accept", "text/html, */*");
httpget.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
//httpget.addHeader("Connection", "close");
//httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20")
response = httpclient.execute(httpget);
Header[] headers = response.getHeaders("Set-Cookie");//.getAllHeaders();
for(Header h : headers){
System.out.println(h);
}
verifySession = headers[0].getValue().split(";|=")[1];
InputStream in = response.getEntity().getContent();
File verifyFile = new File(QQcar.class.getResource("output").getPath() + "/verifycode.jpg");
FileOutputStream out = new FileOutputStream(verifyFile);
byte[] buf = new byte[1024];
while(in.read(buf) != -1){
out.write(buf);
}
out.flush();
System.out.println("验证码图片已生成。路径:" + verifyFile.getCanonicalPath());
System.out.println("请输入验证码:");
verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
while(verifyString.length() != 4){
System.out.println("验证码长度有误,请输入4位验证码:");
verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
}
}
public static void doLogin() throws Exception{
if(!loginFlag){
getVerifyImage();
HttpPost httpost = new HttpPost("http://ptlogin2.qq.com/login");
List <NameValuePair> nvps = new ArrayList <NameValuePair>();
nvps.add(new BasicNameValuePair("u", QQNUM));
nvps.add(new BasicNameValuePair("p", md5( md5_3(PASSWORD) + verifyString.toUpperCase())));
nvps.add(new BasicNameValuePair("verifycode", verifyString));
nvps.add(new BasicNameValuePair("aid", "8000108"));
nvps.add(new BasicNameValuePair("u1", "http://imgcache.qq.com/qzone/v5/loginsucc.html"));
nvps.add(new BasicNameValuePair("fp", "loginerroralert"));
nvps.add(new BasicNameValuePair("h", "1"));
nvps.add(new BasicNameValuePair("ptredirect", "0"));
nvps.add(new BasicNameValuePair("ptlang", "0"));
nvps.add(new BasicNameValuePair("from_ui", "1"));
nvps.add(new BasicNameValuePair("dumy", "1"));
httpost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
httpost.setHeader("Cookie", "verifysession=" + verifySession + ";");
httpost.setHeader("Referer", "http://ui.ptlogin2.qq.com/cgi-bin/login?link_target=blank&target=self&appid=8000108&qlogin_jumpname=vipmyqq&f_url=loginerroralert&qlogin_auto_login=1&s_url=http%3A//imgcache.qq.com/qzone/v5/loginsucc.html&qlogin_param=jump_url%3D");
httpost.setHeader("Accept", "text/html, */*");
httpost.removeHeaders("Cookie2");
httpost.removeHeaders("Expect");
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
response = httpclient.execute(httpost);
cookies = httpclient.getCookieStore().getCookies();
if (cookies.size() < 3) {
System.err.println("登录失败...");
loginFlag = false;
} else {
System.out.println("登录成功...");
for(Cookie c : cookies){
System.out.println(c);
}
loginFlag = true;
}
}
}
public static void main(String[] args) throws Exception{
doLogin();
}
}
package util.mygametools.qq;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Security {
private final static char[] hexDigits = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
private static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
int t;
for (int i = 0; i < 16; i++) {
t = bytes[i];
if (t < 0)
t += 256;
sb.append(hexDigits[(t >>> 4)]);
sb.append(hexDigits[(t % 16)]);
}
return sb.toString();
}
public static String md5(String input) throws Exception {
return code(input, 32);
}
public static String code(String input, int bit) throws Exception {
try {
MessageDigest md = MessageDigest.getInstance(System.getProperty(
"MD5.algorithm", "MD5"));
if (bit == 16)
return bytesToHex(md.digest(input.getBytes("utf-8")))
.substring(8, 24);
return bytesToHex(md.digest(input.getBytes("utf-8")));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
throw new Exception("Could not found MD5 algorithm.", e);
}
}
public static String md5_3(String b) throws Exception{
MessageDigest md = MessageDigest.getInstance(System.getProperty(
"MD5.algorithm", "MD5"));
byte[] a = md.digest(b.getBytes());
a = md.digest(a);
a = md.digest(a);
return bytesToHex(a);
}
}
WIN的就有!
{
private static string binl2hex(byte[] buffer)
{
StringBuilder builder = new StringBuilder();
for (int i = 0; i < buffer.Length; i++)
{
builder.Append(buffer[i].ToString("x2"));
}
return builder.ToString();
}
/// <summary>
/// 加密用户输入的秘密以保存在配置文件中
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string md5_3(string input)
{
MD5 md = MD5.Create();
byte[] buffer = md.ComputeHash(Encoding.Default.GetBytes(input));
buffer = md.ComputeHash(buffer);
buffer = md.ComputeHash(buffer);
return binl2hex(buffer).ToUpper();
} public static string md5(string input)
{
byte[] buffer = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input));
return binl2hex(buffer);
}
/// <summary>
/// 从用户输入的密码 获取TX服务器需要的密码
/// </summary>
/// <param name="password"></param>
/// <param name="verifycode"></param>
/// <returns></returns>
public static string getPassword(string password, string verifycode)
{
return getPassword_1(md5_3(password), verifycode);
}
/// <summary>
/// 从配置保存的密码 获取TX服务器需要的密码
/// </summary>
/// <param name="password"></param>
/// <param name="verifycode"></param>
/// <returns></returns>
public static string getPassword_1(string password, string verifycode)
{
return md5(password + verifycode.ToUpper()).ToUpper();
} public static System.Net.CookieContainer ACookies(string CookiesString)
{
CookieContainer cl = new CookieContainer();
string ss = null;
foreach (string s in CookiesString.Split(';'))
{
ss = s.Trim();
if (ss.IndexOf(",") == -1)
{
cl.Add(new Cookie(ss.Split('=')[0].Trim(), ss.Split('=')[1].Trim(), "/", ".qq.com"));
}
}
return cl;
} public static string GetCookie(CookieContainer myCookieContainer, string url)
{
CookieCollection c = myCookieContainer.GetCookies(new Uri(url));
string str = "";
for (int i = 0; i < c.Count; i++)
{
if (str == "")
{
str += c[i].Name + "=" + c[i].Value;
}
else
{
str += "&" + c[i].Name + "=" + c[i].Value;
}
}
return str; }
}密码的转换
会POST数据自己抓下包就可以了!
/// 登陆
/// </summary>
/// <param name="qquserinput"></param>
/// <param name="passwordsubmit"></param>
/// <param name="vcodeuserinput"></param>
private void TryLogin(string qquserinput, string passwordconfig, string vcodeuserinput)
{
string passwordsubmit = QQPassword.getPassword_1(passwordconfig, vcodeuserinput);
}
看你往那个页面登陆了
{
string url = "http://ptlogin2.qq.com/getimage?aid=8000108&0.7022592303274631";
bool State = false;
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.KeepAlive = false;
// request.CookieContainer = cc;
// 接收返回的页面
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
System.IO.Stream responseStream = response.GetResponseStream();
ViewState["session"] = Regex.Split(response.Headers["Set-Cookie"].ToString(), @"=")[1].Replace("; PATH", "");
Bitmap B = new Bitmap(responseStream);
B.Save(EITCN.COMMON.PublicFunction.MapPath("123.jpg"));
B.Dispose();
response.Close();
responseStream.Close();
} /// <summary>
/// 计算网页上QQ登录时密码加密后的结果
/// </summary>
/// <param name="pwd" />QQ密码</param>
/// <param name="verifyCode" />验证码</param>
/// <returns></returns>
public static String Encrypt(string pwd, string verifyCode)
{
return (md5(md5_3(pwd).ToUpper() + verifyCode.ToUpper())).ToUpper();
}
/// <summary>
/// 计算字符串的三次MD5
/// </summary>
/// <param name="s" /></param>
/// <returns></returns>
private static String md5_3(String s)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s); bytes = md5.ComputeHash(bytes);
bytes = md5.ComputeHash(bytes);
bytes = md5.ComputeHash(bytes); md5.Clear(); string ret = "";
for (int i = 0; i < bytes.Length; i++)
{
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
} return ret.PadLeft(32, '0');
}
/// <summary>
/// 计算字符串的一次MD5
/// </summary>
/// <param name="s" /></param>
/// <returns></returns>
private static String md5(String s)
{
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s); bytes = md5.ComputeHash(bytes); md5.Clear(); string ret = "";
for (int i = 0; i < bytes.Length; i++)
{
ret += Convert.ToString(bytes[i], 16).PadLeft(2, '0');
} return ret.PadLeft(32, '0');
} protected void TestSend_Click(object sender, EventArgs e)
{
//http://ptlogin2.qq.com/login?u=1599979&p=DF573F6A2C926F08A1BC0E5134706240&verifycode=SBKX&aid=2001601&u1=http%3A%2F%2Faq.qq.com%2Fcn%2Fservices%2Fsafe_check%2Fsafe_check&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert
string YZM = EITCN.COMMON.eitRequest.GetFormString("verifycode");
//EITCN.COMMON.HttpClient Http = new EITCN.COMMON.HttpClient();
string Content = "";
string pwd = (md5(md5_3("love613").ToUpper() + YZM.ToUpper())).ToUpper(); EITCN.COMMON.HttpClient H = new EITCN.COMMON.HttpClient();
H.Headers.Set("Cookie", "verifysession=" + ViewState["session"] + "");
H.Headers.Set("Referer", "http://ui.ptlogin2.qq.com/cgi-bin/login?link_target=blank&target=self&appid=8000108&qlogin_jumpname=vipmyqq&f_url=loginerroralert&qlogin_auto_login=1&s_url=http%3A//imgcache.qq.com/qzone/v5/loginsucc.html&qlogin_param=jump_url%3D");
H.Headers.Set("Accept", "text/html, */*");
H.Headers.Remove("Cookie2");
H.Headers.Remove("Expect");
H.PostData("http://ptlogin2.qq.com/login", "u=81888700&p=" + pwd + "&verifycode=" + YZM.ToUpper() + "&aid=8000108&u1=http%3A%2F%2Faq.qq.com%2Fcn%2Fservices%2Fsafe_check%2Fsafe_check&h=1&ptredirect=1&ptlang=2052&from_ui=1&dumy=&fp=loginerroralert", "utf-8", "utf-8", out Content);
Response.Write(Content);
}
得图的时候要设置COOKIE
C#用
public System.Net.CookieContainer Cookies;
也就不用自己管理了
FileOutputStream out = new FileOutputStream(verifyFile);
byte[] buf = new byte[1024];
while(in.read(buf) != -1){
out.write(buf);
}
out.flush(); //这里没有不关闭输出流,会造成看不到图片2)nvps.add(new BasicNameValuePair("p", md5( md5_3(PASSWORD) + verifyString.toUpperCase())));//这里的md5 和md5_3方法编译无法通过3)File verifyFile = new File(QQcar.class.getResource("output").getPath() + "/verifycode.jpg"); //QQcar.class.getResource("output")得到为null 不如改成QQcar.class.getResource("/") 安全些