奇迹什么网站系统可以无视MD5加密sql 数据库md5加密,不要说什么群英自带的js

源代码下载地址:
HMacMD5 加密纯 Java 实现,用于淘宝客 JS 组件 API 调用时生成 sign 的签名
另外:给大家贴一段淘宝客组件 API (JS API) 调用时,生成签名的核心代码。 另外:从事淘宝客开发的童鞋,碰到啥问题可以找我交流!!!
String timestamp = System.currentTimeMillis() + &&;
String message = TaobaokeConfig.APP_SECRET + &app_key& + TaobaokeConfig.APP_KEY + &timestamp& + timestamp + TaobaokeConfig.APP_SECRET;
byte[] bytes = HMacMD5.getHmacMd5Bytes(TaobaokeConfig.APP_SECRET.getBytes(), message.getBytes());
String mysign = Hex.byte2HexStr(bytes).toLowerCase();
WebUtil.addCookie(response, &timestamp&, timestamp, 120);
WebUtil.addCookie(response, &sign&, mysign, 120);
HMacMD5.java
The Haohui Network Corporation
package com.mon.
import java.io.UnsupportedEncodingE
import java.security.MessageD
import java.security.NoSuchAlgorithmE
* HeX 之后 46 位
  HMAC的原理和应用
  hmac的原理
  计算HMAC需要一个散列函数hash(可以是md5或者sha-1)和一个密钥key。用L表示hash函数输出字符串长(md5是16),用B表示数据块的长度(md5和sha-1的分割数据块长都是64)。密钥key的长度可以小于等于数据块长B,如果大于数据块长度,可以使用hash函数对key进行转换,结果就是一个L长的key。
  然后创建两个B长的不同字符串:
  innerpad = 长度为B的 0×36
  outterpad = 长度为B的 0×5C
  计算输入字符串str的HMAC:
  hash(key ^ outterpad, hash(key ^ innerpad, str))
  hmac的应用
  hmac主要应用在身份验证中,它的使用方法是这样的:
  1. 客户端发出登录请求(假设是浏览器的GET请求)
  2. 服务器返回一个随机值,并在会话中记录这个随机值
  3. 客户端将该随机值作为密钥,用户密码进行hmac运算,然后提交给服务器
  4. 服务器读取用户数据库中的用户密码和步骤2中发送的随机值做与客户端一样的hmac运算,然后与用户发送的结果比较,如果结果一致则验证用户合法
  在这个过程中,可能遭到安全攻击的是服务器发送的随机值和用户发送的hmac结果,而对于截获了这两个值的黑客而言这两个值是没有意义的,绝无获取用户密码的可能性,随机值的引入使hmac只在当前会话中有效,大大增强了安全性和实用性。大多数的语言都实现了hmac算法,比如php的mhash、python的hmac.py、java的MessageDigest类,在web验证中使用hmac也是可行的,用js进行md5运算的速度也是比较快的。
* @project baidamei
* @author cevencheng &&
下午5:38:38
public class HMacMD5 {
* 计算参数的md5信息
* @param str
待处理的字节数组
* @return md5摘要信息
* @throws NoSuchAlgorithmException
private static byte[] md5(byte[] str) throws NoSuchAlgorithmException {
MessageDigest md = MessageDigest.getInstance(&MD5&);
md.update(str);
return md.digest();
* 将待加密数据data,通过密钥key,使用hmac-md5算法进行加密,然后返回加密结果。 参照rfc2104 HMAC算法介绍实现。
* @author 尹星
* @param key
* @param data
待加密数据
* @return 加密结果
* @throws NoSuchAlgorithmException
public static byte[] getHmacMd5Bytes(byte[] key, byte[] data) throws NoSuchAlgorithmException {
* HmacMd5 calculation formula: H(K XOR opad, H(K XOR ipad, text))
* HmacMd5 计算公式:H(K XOR opad, H(K XOR ipad, text))
* H代表hash算法,本类中使用MD5算法,K代表密钥,text代表要加密的数据 ipad为0x36,opad为0x5C。
int length = 64;
byte[] ipad = new byte[length];
byte[] opad = new byte[length];
for (int i = 0; i & 64; i++) {
ipad[i] = 0x36;
opad[i] = 0x5C;
byte[] actualKey = // Actual key.
byte[] keyArr = new byte[length]; // Key bytes of 64 bytes length
* If key's length is longer than 64,then use hash to digest it and use
* the result as actual key. 如果密钥长度,大于64字节,就使用哈希算法,计算其摘要,作为真正的密钥。
if (key.length & length) {
actualKey = md5(key);
for (int i = 0; i & actualKey. i++) {
keyArr[i] = actualKey[i];
* append zeros to K 如果密钥长度不足64字节,就使用0x00补齐到64字节。
if (actualKey.length & length) {
for (int i = actualKey. i & keyArr. i++)
keyArr[i] = 0x00;
* calc K XOR ipad 使用密钥和ipad进行异或运算。
byte[] kIpadXorResult = new byte[length];
for (int i = 0; i & i++) {
kIpadXorResult[i] = (byte) (keyArr[i] ^ ipad[i]);
* append &text& to the end of &K XOR ipad& 将待加密数据追加到K XOR ipad计算结果后面。
byte[] firstAppendResult = new byte[kIpadXorResult.length + data.length];
for (int i = 0; i & kIpadXorResult. i++) {
firstAppendResult[i] = kIpadXorResult[i];
for (int i = 0; i & data. i++) {
firstAppendResult[i + keyArr.length] = data[i];
* calc H(K XOR ipad, text) 使用哈希算法计算上面结果的摘要。
byte[] firstHashResult = md5(firstAppendResult);
* calc K XOR opad 使用密钥和opad进行异或运算。
byte[] kOpadXorResult = new byte[length];
for (int i = 0; i & i++) {
kOpadXorResult[i] = (byte) (keyArr[i] ^ opad[i]);
* append &H(K XOR ipad, text)& to the end of &K XOR opad& 将H(K XOR
* ipad, text)结果追加到K XOR opad结果后面
byte[] secondAppendResult = new byte[kOpadXorResult.length + firstHashResult.length];
for (int i = 0; i & kOpadXorResult. i++) {
secondAppendResult[i] = kOpadXorResult[i];
for (int i = 0; i & firstHashResult. i++) {
secondAppendResult[i + keyArr.length] = firstHashResult[i];
* H(K XOR opad, H(K XOR ipad, text)) 对上面的数据进行哈希运算。
byte[] hmacMd5Bytes = md5(secondAppendResult);
return hmacMd5B
public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
byte[] macmd5 = HMacMD5.getHmacMd5Bytes(&7e62ff29fcfb1&.getBytes(), &&.getBytes());
System.out.println(Hex.byte2HexStr(macmd5));
System.out.println(Hex.byte2HexStr(&xxoo&.getBytes()));
System.out.println(Hex.byte2HexStr(HMacMD5.getHmacMd5Bytes(&7e62ff29fcfb1&.getBytes(), &xxoo&.getBytes())));
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:182866次
积分:5914
积分:5914
排名:第2079名
原创:385篇
评论:54条
(8)(30)(31)(30)(30)(29)(31)(20)(31)(31)(27)(31)(30)(26)霹雳奇迹网站所有网站美化包
&& Post By: 20:49:00
奇迹私服各种网站经典收藏美化包下载
基本包含了奇迹私服市面上所有美化包,大家尽可下载,下载后自行查杀病毒,其中包含最新的美化和仿官方网站系统,仿官方网站系统不支持MD5加密,安装的时候建立MU
DSN数据源,0.97版本以上的JS都需要MD5加密了,所以换一个0.97版的JS就可以了,具体下载地址自己去找,安装霹雳美化后,不能正常访问的,用修改数据库帐号密码即可,注意那个注册码别乱改
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。现在位置: >
奇迹1.03H服务端:带教程、GM工具、客户端、修改教程
奇迹1.03H服务端:带教程、GM工具、客户端、修改教程
奇迹1.03H 最新版(日更新的)
& 本奇迹有RK统一修改整理发布,禁止用于商业用途,只用来娱乐与技术交流谢谢大家!奇迹最全X商店,全职业,全连击,全技能,爆率文件与修改文件破解汉化了已经,最全M传送,暂时未发现BUG,算是我整理的修改最完成的端了!~
奇迹1.03H 最新版(日更新的)
本端奇迹最好是win2003系统 XP系统也可以,其它系统未做测试,win7用户请你安装VM虚拟机,之后安装本游戏!
奇迹基本介绍:
【经验点数】经验9999倍.大师100倍,掉钱50倍,升级点数魔剑/圣导/召唤师没等级点数55、其它职业50、二转后50,上线送送点数与钱数,默认有数据库SQL语句执行,后面教程讲解
【X商店设置】大陆开个人商店1秒钟2000分,节省大家时间,X商店装备,基本物品都卖,为了大家方便,牛B的装备还得去打BOSS
【套装设置】古战场设置爆基本成套套装,冰封城爆 强化套装以及卓越400或者380的卓越或者普通装备。
【刷怪设置】&我就设置了几个刷怪点估计够用了,后续会给大家讲解刷怪教程,勇者南门--古战场--坎特鲁2--坎特鲁废墟---冰封城
【副本设置】所有副本全开,X商店可以购买所有门票,进的NPC基本没动,后续有移动NPC教程,后面自己改
【Boss设置】卡7困顿、还有几个地方忘记了都是自己刷的。可在线加点和在线洗点,可以完美连击等。
【转职设置】转职方便,M移动菜单更改强化了,有好多地方可以去,三转怪一出兵营就有好多,不用跑很远
更新了X商店文件,游戏爆率,卓越爆率,卓越等级爆率,困顿爆率等文件汉化等,大家可以看我后面的修改教程,这样自己可以更改出完美端,暂时测试内容,局域网测试以及外网测试,暂时没发现BUG,不掉线不卡机不当机,还有好多我自己调整的设置,自己体验吧;工程线路与服务未开启过,未测试过,不多说了。修改类内容多多关注我博客,会更新教程的。
&注意:如果你安装了360、QQ管家等其它杀毒安全软件,记得一下文件要记得坐下信任,某些文件容易被查杀,你如果不信任我,可以不下我的端,勿喷!
一、下载类:
本版本已经下载失效,大家下载最新版本& 奇迹1.03H 最新版(日更新的)
1、服务端:链接: 密码:9uns
2、客户端:&密码:8bm1
3、奇迹登陆器:密码:0cia&& (这个我在客户端中也集成了,都是需要修改配置文件,后面有介绍,别着急)
4、GM工具:&&&&&&&&(百度网盘审核部通过,可来群文件下下载,群文件名称:奇迹1.03HGM工具(网盘封杀).rar &体谅)
本版本已经下载失效,大家下载最新版本& 奇迹1.03H 最新版(日更新的)
二、游戏安装:
1、下载服务端文件Muonlie和客户端文件
2、解压服务端文件到D盘根目录下
3、下载SQL2000文件与SP4补丁,安装SQL2000并打SP4补丁,教程地址:
4、奇迹数据库建立、恢复数据库与注册ODBC组件,详细见下视频,
&&& 其中数据库建立与恢复可参考教程:
&&& 数据库新建、恢复视频教程:链接: 密码:ypwf
5、更改数据库MD5加密设置以及解决方式,地址:
6、修改IP设置(含局域网修改)以及更改登陆器设置
A:服务端文件修改:
&&&&打开 D:\MuOnline\ConnectServer 下的 “KGCsConfig.ini”& 用记事本或者NOP++打开后,找到以下语句,把IP全部更改为你本机器的IP地址或者本地地址即可(127.0.0.1)。& 其中192.168.6.203 是我的机器IP 你们更改下即可
&&& [KGSERVER0]
KGLIST0=0,192.168.6.203,55901
KGLIST1=1,192.168.6.203,55903
KGLIST2=2,192.168.6.203,55909
B:客户端文件修改:打开下载登陆器文件或者客户端文件& 找到文件“LoginConfig.dat” 文件用记事本打开,找到&& 服务器地址=192.168.6.203& 地址更改为服务器上的地址(服务端放的机器上)或者是单机本热玩 改成 127.0.0.1
改好后,可以局域网,开全部端口后自建服务器,可以开外网,群里面测试过。
7、打开GM工具MuEdit8.71,注册账号
8、开启服务,其中:“奇迹一线”在游戏中上线提示为“交易线”,可以更具自己爱好重新设置,见后面教程;“奇迹二线”与“奇迹攻城线”不启动,攻城线路未做测试。
三、游戏修改类教程整理:
本版本已经下载失效,大家下载最新版本& 奇迹1.03H 最新版(日更新的)
版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《Rk-blogs》。
本文网址:http://www./qiji103fuwuduan2014.html
上篇文章:
下篇文章:10659人阅读
客户说我的***系统登录时密码是明文传输,不高兴,我对HTTPS不太了解,那我用MD5加密下,虽然不能保证万无一失,但也好过明文传输嘛。
说下大概的过程:打开登录的JSP页面时,生成一个随机字符串,放在session里面,以便后台也可以拿到。客户输入用户名和密码点击&登录&时,拿到密码和随机字符串,拼接在一起后利用js生成MD5字符串。然后用js把那个password的value改成MD5字符串,再提交表单。
后台拿到随机字符串和用户名和MD5字符串,通过用户名到数据库查询密码,用密码和随机字符串拼接在一起生成MD5字符串,用生成的MD5字符串和前台传过来的MD5字符串进行匹配,如果一致就通过验证。
------------------------------前台-------------------------------------
jsp页面生成随机数:
String pageName = pageContext.getRequest().getParameter(&pageName&);
pageName = StringUtils.filterUnsafeChars(pageName); //业务系统内部的一个过滤操作,可以跳过这一步
//产生随机数,和密码一起生成MD5
request.getSession().setAttribute(&md5RandomKey&, StringUtils.getRandomNum(10));
表单submit时调用下面的函数:
function encryptionPassword(){
var hash = MD5($(&user_password&).value+&${md5RandomKey}&);
$(&user_password&).value =
md5.js如下:
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Copyright (C) Paul Johnston 1999 - 2000.
* Updated by Greg Holt 2000 - 2001.
* See http://pajhome.org.uk/site/legal.html for details.
var hex_chr = &abcdef&;
function rhex(num) {
for (j = 0; j &= 3; j++) {
str += hex_chr.charAt((num && (j * 8 + 4)) & 15) + hex_chr.charAt((num && (j * 8)) & 15);
function str2blks_MD5(str) {
nblk = ((str.length + 8) && 6) + 1;
blks = new Array(nblk * 16);
for (i = 0; i & nblk * 16; i++) {
blks[i] = 0;
for (i = 0; i & str. i++) {
blks[i && 2] |= str.charCodeAt(i) && ((i % 4) * 8);
blks[i && 2] |= 128 && ((i % 4) * 8);
blks[nblk * 16 - 2] = str.length * 8;
function add(x, y) {
var lsw = (x & 65535) + (y & 65535);
var msw = (x && 16) + (y && 16) + (lsw && 16);
return (msw && 16) | (lsw & 65535);
function rol(num, cnt) {
return (num && cnt) | (num &&& (32 - cnt));
function cmn(q, a, b, x, s, t) {
return add(rol(add(add(a, q), add(x, t)), s), b);
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | ((~b) & d), a, b, x, s, t);
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & (~d)), a, b, x, s, t);
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t);
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | (~d)), a, b, x, s, t);
function MD5(str) {
x = str2blks_MD5(str);
var b = -;
var c = -;
for (i = 0; i & x. i += 16) {
var olda =
var oldb =
var oldc =
var oldd =
a = ff(a, b, c, d, x[i + 0], 7, -);
d = ff(d, a, b, c, x[i + 1], 12, -);
c = ff(c, d, a, b, x[i + 2], 17, );
b = ff(b, c, d, a, x[i + 3], 22, -);
a = ff(a, b, c, d, x[i + 4], 7, -);
d = ff(d, a, b, c, x[i + 5], 12, );
c = ff(c, d, a, b, x[i + 6], 17, -);
b = ff(b, c, d, a, x[i + 7], 22, -);
a = ff(a, b, c, d, x[i + 8], 7, );
d = ff(d, a, b, c, x[i + 9], 12, -);
c = ff(c, d, a, b, x[i + 10], 17, -42063);
b = ff(b, c, d, a, x[i + 11], 22, -);
a = ff(a, b, c, d, x[i + 12], 7, );
d = ff(d, a, b, c, x[i + 13], 12, -);
c = ff(c, d, a, b, x[i + 14], 17, -);
b = ff(b, c, d, a, x[i + 15], 22, );
a = gg(a, b, c, d, x[i + 1], 5, -);
d = gg(d, a, b, c, x[i + 6], 9, -);
c = gg(c, d, a, b, x[i + 11], 14, );
b = gg(b, c, d, a, x[i + 0], 20, -);
a = gg(a, b, c, d, x[i + 5], 5, -);
d = gg(d, a, b, c, x[i + 10], 9, );
c = gg(c, d, a, b, x[i + 15], 14, -);
b = gg(b, c, d, a, x[i + 4], 20, -);
a = gg(a, b, c, d, x[i + 9], 5, );
d = gg(d, a, b, c, x[i + 14], 9, -);
c = gg(c, d, a, b, x[i + 3], 14, -);
b = gg(b, c, d, a, x[i + 8], 20, );
a = gg(a, b, c, d, x[i + 13], 5, -);
d = gg(d, a, b, c, x[i + 2], 9, -);
c = gg(c, d, a, b, x[i + 7], 14, );
b = gg(b, c, d, a, x[i + 12], 20, -);
a = hh(a, b, c, d, x[i + 5], 4, -378558);
d = hh(d, a, b, c, x[i + 8], 11, -);
c = hh(c, d, a, b, x[i + 11], 16, );
b = hh(b, c, d, a, x[i + 14], 23, -);
a = hh(a, b, c, d, x[i + 1], 4, -);
d = hh(d, a, b, c, x[i + 4], 11, );
c = hh(c, d, a, b, x[i + 7], 16, -);
b = hh(b, c, d, a, x[i + 10], 23, -);
a = hh(a, b, c, d, x[i + 13], 4, );
d = hh(d, a, b, c, x[i + 0], 11, -);
c = hh(c, d, a, b, x[i + 3], 16, -);
b = hh(b, c, d, a, x[i + 6], 23, );
a = hh(a, b, c, d, x[i + 9], 4, -);
d = hh(d, a, b, c, x[i + 12], 11, -);
c = hh(c, d, a, b, x[i + 15], 16, );
b = hh(b, c, d, a, x[i + 2], 23, -);
a = ii(a, b, c, d, x[i + 0], 6, -);
d = ii(d, a, b, c, x[i + 7], 10, );
c = ii(c, d, a, b, x[i + 14], 15, -);
b = ii(b, c, d, a, x[i + 5], 21, -);
a = ii(a, b, c, d, x[i + 12], 6, );
d = ii(d, a, b, c, x[i + 3], 10, -);
c = ii(c, d, a, b, x[i + 10], 15, -1051523);
b = ii(b, c, d, a, x[i + 1], 21, -);
a = ii(a, b, c, d, x[i + 8], 6, );
d = ii(d, a, b, c, x[i + 15], 10, -);
c = ii(c, d, a, b, x[i + 6], 15, -);
b = ii(b, c, d, a, x[i + 13], 21, );
a = ii(a, b, c, d, x[i + 4], 6, -);
d = ii(d, a, b, c, x[i + 11], 10, -);
c = ii(c, d, a, b, x[i + 2], 15, );
b = ii(b, c, d, a, x[i + 9], 21, -);
a = add(a, olda);
b = add(b, oldb);
c = add(c, oldc);
d = add(d, oldd);
return rhex(a) + rhex(b) + rhex(c) + rhex(d);
-------------------------后台----------------------------------
拿到随机字符串:
String md5RandomKey = (String)request.getSession().getAttribute(&md5RandomKey&);
拿到密码(MD5字符串):
String md5Password = request.getParameter(&user_password&);
然后通过用户名到数据库查询该用户的密码,如果用户不存在则提前提示错误。
拿到数据库的密码后和上面的随机字符串(md5RandomKey)一起生成MD5字符串:
String md5Password_real = StringUtils.getMD5Str(attendant.getPassword()+md5RandomKey,null);
最后拿&md5Password_real和md5Password 进行比较,一致则通过验证。
下面是上面代码用到的在StringUtils下的两个函数:
1:获取随机字符串:
private static final String ALLCHAR = &abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&;
* 获取任意位的随机字符串(0-9 a-z A-Z)
* @param size 位数
public static final String getRandomNum(int size){
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i & i++) {
sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
return sb.toString();
2:生成MD5字符串:
* md5加密(ITS)
* @param str
* @param charSet
public synchronized static final String getMD5Str(String str,String charSet) { //md5加密
MessageDigest messageDigest =
messageDigest = MessageDigest.getInstance(&MD5&);
messageDigest.reset();
if(charSet==null){
messageDigest.update(str.getBytes());
messageDigest.update(str.getBytes(charSet));
} catch (NoSuchAlgorithmException e) {
log.error(&md5 error:&+e.getMessage(),e);
} catch (UnsupportedEncodingException e) {
log.error(&md5 error:&+e.getMessage(),e);
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i & byteArray. i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append(&0&).append(Integer.toHexString(0xFF & byteArray[i]));
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
return md5StrBuff.toString();
上面的MessageDigest所在的包是:& java.security.MessageDigest
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:356478次
积分:5598
积分:5598
排名:第2294名
原创:181篇
转载:60篇
评论:111条
(1)(1)(2)(2)(4)(1)(1)(3)(1)(3)(1)(3)(6)(3)(5)(4)(3)(3)(3)(1)(4)(9)(6)(11)(18)(24)(7)(1)(4)(11)(2)(7)(5)(9)(12)(45)(3)(19)(1)

我要回帖

更多关于 md5数据库下载 的文章

 

随机推荐