`
zl_go
  • 浏览: 36519 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

md5 for qq

 
阅读更多


public class TestCode {
	// ==========================================
	// 登录密码编码
	// ==========================================

	public String passwordHash(String password, String verifyCode) {

		return md5(md5_3(password) + verifyCode.toUpperCase());
	}

	protected String md5(String p) {
		return hex_md5(p);
	}

	/**
	 * function hexchar2bin(str) {
	 *  var arr = []; for (var i = 0; i < str.length;
	 * i = i + 2) { arr.push("\\x" + str.substr(i, 2)) } arr = arr.join("");
	 * eval("var temp = '" + arr + "'"); return temp }
	 */

	protected String hexchar2bin(String str) {

		StringBuffer tr = new StringBuffer();
		for (int i = 0; i < str.length(); i = i + 2) {

			tr.append("\\x").append(str.substring(i, i + 2));
		}

		return new String(hexStringToBytes(tr.toString()));
	}

	protected String md5_3(String p) {

		/**
		 * 
		 * var H = hexchar2bin(md5(D)); var F = md5(H + pt.uin); var C = md5(F +
		 * G.verifycode.value.toUpperCase());
		 */

		/*
		 * String h = hexchar2bin(md5(p)); String f = md5(h + pt.uin);
		 */

		int s[] = null;
		s = core_md5(str2binl(p), p.length() * 8);
		s = core_md5(s, 16 * 8);
		s = core_md5(s, 16 * 8);
		return binl2hex(s);
	}

	protected String hex_md5(String p) {
		return binl2hex(core_md5(str2binl(p), p.length() * 8));
	}

	protected int[] core_md5(int[] s, int k) {
		s[k >> 5] |= 128 << (k % 32);
		s[(((k + 64) >>> 9) << 4) + 14] = k;
		int o = 1732584193;
		int n = -271733879;
		int m = -1732584194;
		int l = 271733878;
		for (int g = 0; g < s.length; g += 16) {
			int j = o;
			int h = n;
			int f = m;
			int e = l;
			o = md5_ff(o, n, m, l, s[g + 0], 7, -680876936);
			l = md5_ff(l, o, n, m, s[g + 1], 12, -389564586);
			m = md5_ff(m, l, o, n, s[g + 2], 17, 606105819);
			n = md5_ff(n, m, l, o, s[g + 3], 22, -1044525330);
			o = md5_ff(o, n, m, l, s[g + 4], 7, -176418897);
			l = md5_ff(l, o, n, m, s[g + 5], 12, 1200080426);
			m = md5_ff(m, l, o, n, s[g + 6], 17, -1473231341);
			n = md5_ff(n, m, l, o, s[g + 7], 22, -45705983);
			o = md5_ff(o, n, m, l, s[g + 8], 7, 1770035416);
			l = md5_ff(l, o, n, m, s[g + 9], 12, -1958414417);
			m = md5_ff(m, l, o, n, s[g + 10], 17, -42063);
			n = md5_ff(n, m, l, o, s[g + 11], 22, -1990404162);
			o = md5_ff(o, n, m, l, s[g + 12], 7, 1804603682);
			l = md5_ff(l, o, n, m, s[g + 13], 12, -40341101);
			m = md5_ff(m, l, o, n, s[g + 14], 17, -1502002290);
			n = md5_ff(n, m, l, o, s[g + 15], 22, 1236535329);
			o = md5_gg(o, n, m, l, s[g + 1], 5, -165796510);
			l = md5_gg(l, o, n, m, s[g + 6], 9, -1069501632);
			m = md5_gg(m, l, o, n, s[g + 11], 14, 643717713);
			n = md5_gg(n, m, l, o, s[g + 0], 20, -373897302);
			o = md5_gg(o, n, m, l, s[g + 5], 5, -701558691);
			l = md5_gg(l, o, n, m, s[g + 10], 9, 38016083);
			m = md5_gg(m, l, o, n, s[g + 15], 14, -660478335);
			n = md5_gg(n, m, l, o, s[g + 4], 20, -405537848);
			o = md5_gg(o, n, m, l, s[g + 9], 5, 568446438);
			l = md5_gg(l, o, n, m, s[g + 14], 9, -1019803690);
			m = md5_gg(m, l, o, n, s[g + 3], 14, -187363961);
			n = md5_gg(n, m, l, o, s[g + 8], 20, 1163531501);
			o = md5_gg(o, n, m, l, s[g + 13], 5, -1444681467);
			l = md5_gg(l, o, n, m, s[g + 2], 9, -51403784);
			m = md5_gg(m, l, o, n, s[g + 7], 14, 1735328473);
			n = md5_gg(n, m, l, o, s[g + 12], 20, -1926607734);
			o = md5_hh(o, n, m, l, s[g + 5], 4, -378558);
			l = md5_hh(l, o, n, m, s[g + 8], 11, -2022574463);
			m = md5_hh(m, l, o, n, s[g + 11], 16, 1839030562);
			n = md5_hh(n, m, l, o, s[g + 14], 23, -35309556);
			o = md5_hh(o, n, m, l, s[g + 1], 4, -1530992060);
			l = md5_hh(l, o, n, m, s[g + 4], 11, 1272893353);
			m = md5_hh(m, l, o, n, s[g + 7], 16, -155497632);
			n = md5_hh(n, m, l, o, s[g + 10], 23, -1094730640);
			o = md5_hh(o, n, m, l, s[g + 13], 4, 681279174);
			l = md5_hh(l, o, n, m, s[g + 0], 11, -358537222);
			m = md5_hh(m, l, o, n, s[g + 3], 16, -722521979);
			n = md5_hh(n, m, l, o, s[g + 6], 23, 76029189);
			o = md5_hh(o, n, m, l, s[g + 9], 4, -640364487);
			l = md5_hh(l, o, n, m, s[g + 12], 11, -421815835);
			m = md5_hh(m, l, o, n, s[g + 15], 16, 530742520);
			n = md5_hh(n, m, l, o, s[g + 2], 23, -995338651);
			o = md5_ii(o, n, m, l, s[g + 0], 6, -198630844);
			l = md5_ii(l, o, n, m, s[g + 7], 10, 1126891415);
			m = md5_ii(m, l, o, n, s[g + 14], 15, -1416354905);
			n = md5_ii(n, m, l, o, s[g + 5], 21, -57434055);
			o = md5_ii(o, n, m, l, s[g + 12], 6, 1700485571);
			l = md5_ii(l, o, n, m, s[g + 3], 10, -1894986606);
			m = md5_ii(m, l, o, n, s[g + 10], 15, -1051523);
			n = md5_ii(n, m, l, o, s[g + 1], 21, -2054922799);
			o = md5_ii(o, n, m, l, s[g + 8], 6, 1873313359);
			l = md5_ii(l, o, n, m, s[g + 15], 10, -30611744);
			m = md5_ii(m, l, o, n, s[g + 6], 15, -1560198380);
			n = md5_ii(n, m, l, o, s[g + 13], 21, 1309151649);
			o = md5_ii(o, n, m, l, s[g + 4], 6, -145523070);
			l = md5_ii(l, o, n, m, s[g + 11], 10, -1120210379);
			m = md5_ii(m, l, o, n, s[g + 2], 15, 718787259);
			n = md5_ii(n, m, l, o, s[g + 9], 21, -343485551);
			o = safe_add(o, j);
			n = safe_add(n, h);
			m = safe_add(m, f);
			l = safe_add(l, e);
		}
		int[] rs = new int[16];
		rs[0] = o;
		rs[1] = n;
		rs[2] = m;
		rs[3] = l;
		return rs;
	}

	protected int[] str2binl(String p) {

		int[] s = new int[16];
		int a = 254;
		for (int i = 0; i < p.length() * 8; i += 8) {
			s[i >> 5] |= ((p.charAt(i / 8)) & a + 1) << (i % 32);
		}
		return s;
	}

	protected int md5_cmn(int h, int e, int d, int c, int g, int f) {
		return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d);
	}

	protected int md5_ff(int g, int f, int k, int j, int e, int i, int h) {
		return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h);
	}

	protected int md5_gg(int g, int f, int k, int j, int e, int i, int h) {
		return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h);
	}

	protected int md5_hh(int g, int f, int k, int j, int e, int i, int h) {
		return md5_cmn(f ^ k ^ j, g, f, e, i, h);
	}

	protected int md5_ii(int g, int f, int k, int j, int e, int i, int h) {
		return md5_cmn(k ^ (f | (~j)), g, f, e, i, h);
	}

	protected int safe_add(int a, int d) {
		int c = (a & 65535) + (d & 65535);
		int b = (a >> 16) + (d >> 16) + (c >> 16);
		return (b << 16) | (c & 65535);
	}

	protected int bit_rol(int a, int b) {
		return (a << b) | (a >>> (32 - b));
	}

	protected String binl2hex(int[] c) {
		String b = "0123456789ABCDEF";
		String d = "";
		for (int a = 0; a < c.length * 4; a++) {
			char x = (char) b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15);
			char y = (char) b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15);
			d += x;
			d += y;
		}
		return d.substring(0, 32);
	}

	/**
	 * Convert hex string to byte[]
	 * 
	 * @param hexString
	 *            the hex string
	 * @return byte[]
	 */
	public String hexStringToBytes(String hexString) {
		 StringBuffer buffer = new StringBuffer();
		if (hexString != null && !"".equals(hexString)) {
			String[] strings = hexString.split("\\\\x");
			for (String str : strings) {
				if (null != str && !"".equals(str)) {
					buffer.append((char) Integer.parseInt(str, 16));
				}
			}
			return buffer.toString();
		}
		return null;
	}

	/**
	 * public byte[] hexStringToBytes(String hexString) { if (hexString == null
	 * || hexString.equals("")) { return null; } hexString =
	 * hexString.toUpperCase(); // String. }
	 */

	public int[] hexStringToInts(String hexString) {
		if (hexString == null || hexString.equals("")) {
			return null;
		}
		hexString = hexString.toUpperCase();
		int length = hexString.length() / 2;
		char[] hexChars = hexString.toCharArray();
		int[] d = new int[length];
		for (int i = 0; i < length; i++) {
			int pos = i * 2;
			d[i] = (int) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
		}
		return d;
	}

	/**
	 * Convert char to byte
	 * 
	 * @param c
	 *            char
	 * @return byte
	 */
	public byte charToByte(char c) {
		return (byte) "0123456789ABCDEF".indexOf(c);
	}

	public static void main(String[] args) {

		/**
		 * var D = "weibo6711329"; var H = hexchar2bin(md5(D)); alert(H); var F
		 * = md5(H + '\x00\x00\x00\x00\x84\xf1\x6d\x72'); var C = md5(F +
		 * "!TFJ");
		 */

		TestCode code = new TestCode();
		String p = code.hexchar2bin(code.md5("weibo6711329"));

		String s ="\\x00\\x00\\x00\\x00\\x84\\xf1\\x6d\\x72";
	//	String uin = new String(code.hexStringToBytes(s));
		
		String uin=code.hexStringToBytes(s);

		String f = code.md5(p + uin);
		String opp = code.md5(f + "!TFJ");

		System.out.println(opp);
		

	}

}

分享到:
评论

相关推荐

    windows下的md5sum

    MD5SUM工具是一种广泛使用的哈希函数,主要目的是为了检验文件的完整性和一致性。它在Windows和Linux等操作系统中都得到了应用。标题“windows下的md5sum”表明我们将讨论的是如何在Windows环境中使用这个功能强大的...

    简单实用的MD5Util工具类

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,主要目的是为了产生一个固定长度的摘要,用于表示任意大小的数据。这个摘要具有不可逆性,即从摘要无法还原原始数据,这使得MD5在信息安全领域有诸多...

    android Md5加密

    在Android开发中,数据安全是至关重要的一个环节,而MD5(Message-Digest Algorithm 5)是一种常用的哈希函数,广泛用于加密和数据校验。本文将深入探讨如何在Android中实现MD5加密,以及其在单字符串和多字符串场景...

    MD5加密程序实例

    // Convert CString to std::string for MD5 calculation std::string stdInput = input.GetString(); // Calculate MD5 hash std::string md5Hash = CalculateMD5Hash(stdInput); // Display the MD5 hash ...

    MD5加密源码

    ### MD5加密源码知识点解析 #### 一、概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,主要用于数据完整性检查。它能够将任意长度的数据转换为一个固定长度(通常是128位)的十六进制字符串。...

    C#MD5加密.zip

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的信息转化为固定长度的摘要值。这个摘要值具有不可逆性,也就是说,从摘要无法还原原始信息,这使得MD5常用于数据校验和密码加密。在...

    ASP[1]NET实现MD5加密算法

    在网络安全方面,MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它可以将任意长度的输入转换为固定长度的输出,通常用于数据校验和密码存储。在ASP.NET中实现MD5加密算法,可以确保用户密码的安全性...

    MD5加密解密

    ### MD5加密解密 #### 一、MD5概述 MD5(Message-Digest Algorithm 5)是一种广泛使用的散列算法,它将任意长度的消息压缩为一个固定长度(通常是128位)的散列值或摘要。由于其计算速度快且结果稳定的特点,MD5在...

    qq for ubuntu 可直接安装

    2020修改备注, 现在腾讯官方以及更新了。大家不用下载这个了,直接去im。qq。康姆下载linux版本的。 原描述: 官方版本因为一个文件字符多余导致在ubuntu中不能直接...修改以后md5为8131528ed16f672e6e505aad382aac09

    md5.main.js资源

    MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. ...

    md5加密文件

    distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file ...

    C#用MD5加密操作实战源码

    MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的输入转化为固定长度的输出,通常是一个128位的二进制数,通常以32位十六进制数的形式表示。在C#编程中,MD5加密被广泛应用在密码...

    富文本解析,折线图,MD5,bluebird_微信小程序模板js代码前台前端H5页面源码.rar

    MD5可以确保数据的安全性,但需要注意的是,MD5已经不被认为足够安全,对于敏感数据应考虑使用更安全的哈希算法。 4. **Bluebird**: Bluebird是一个JavaScript的Promise库,提供了一种处理异步操作的方式。虽然在...

    dos环境登qq

    这里,我们通常会使用一个名为“DOS版QQ”或“QQ for DOS”的特殊版本,它被设计成在DOS环境下运行。这个版本的QQ通常是一个基于字符界面的客户端,能够实现基本的消息收发功能。 要运行DOS版QQ,你需要确保你的...

    QQ精简工具

    Md "%AppData%\Tencent\QQ\Misc\CSC\2052" &gt;nul 2&gt;nul Md "%AppData%\Tencent\QQ\Skins" &gt;nul 2&gt;nul Echo.&gt;"%AppData%\Tencent\QQ\Misc\OAPanelLogo" Echo.&gt;"%AppData%\Tencent\QQ\Misc\LogoFile" Echo.&gt;"%AppData%\...

    First day for JAVA.md

    适合java一起学习的小白

    一起学Java——Day04.md

    该资源为md格式,需下载typora可打开,该内容讲述的是Java中的循环结构,其中有while循环do-while循环以及for循环,还有break,conrinue两个跳转语句的区别以及Rondom产生随机数字的基本知识

    JUC并发编程.md

    例如,打开一个QQ应用程序就创建了一个进程(`QQ.exe`)。一个进程至少包含一个线程,通常情况下包含多个线程。 - **Java中的进程**: Java虚拟机启动时,默认创建两个线程:`main`线程和`GC`(垃圾回收)线程。 ...

    WEBQQ加密算法

    public static string Md5(string qq, string password, string captcha) { // 将QQ号、密码和验证码拼接成一个字符串 string combined = $"{qq}{password}{captcha}"; // 创建MD5加密服务实例 MD5 md5Hasher...

    基于 go-cqhttp 和 Node.js 的 QQ 机器人框架 for-node.zip

    这是一个基于 go-cqhttp 和 Node.js 构建的 QQ 机器人项目,提供丰富的插件支持,包括黄历、基金查询、热门词汇等...4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics