有个blowfish的问题请教

陪你去看龙卷风

新手上路
VIP
注册
2002-10-12
消息
11,271
荣誉分数
61
声望点数
0
okey,也许我永远都得不到回复,不过依旧想在这里问一下,运气好说不定有

我最近在写一个游戏服务器端的模拟器
我尝试了JAVA, C#,一共写了3个版本,结果没有一个没有一定时间的delay,也就是所谓的lag.

于是我换到了C++
不过碰到了一个blowfish加密,解密的问题
所有数据发送到服务器端是这样构成的

0x32, 0x00,

0xEA,0xC4,0x60,0x77,
0x14,0x6A,0xBC,0x23,
0x3B,0x36,0xFC,0x34,
0xA0,0xDD,0x82,0xAF,
0xD6,0x9E,0xAB,0x38,
0x05,0xB1,0xE6,0x98,
0x0D,0x2D,0x41,0x44,
0x78,0x22,0x29,0xB6,
0x76,0x62,0x4A,0x79,
0xFE,0x01,0xED,0x06,
0x51,0xE7,0x19,0xE1,
0x35,0x1E,0xAA,0x19


lengthLo = buffRecv[0]; //0x32
lengthHi = buffRecv[1]; //0x00

length= lengthHi*256 + lengthLo; //总共的数据长度,包括最前头的2个bytes
剩下的是Blowfish ECB加密的数据

Blowfish ECB mode
密匙 => "[;'.]94-31==-%&@!^+]\0"

理论上,上头那串数据解密以后应该会返回类似这样的array

0x00,0x74,0x6f,0x72,
0x75,0x6e,0x65,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x63,
0x68,0x65,0x6e,0x77,
0x65,0x69,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x78,0x16,0x64,0x6e,
0x00,0x00,0x00,0x00

可是我借用的那个Blowfish加密
http://www.codeproject.com/cpp/blowfish.asp

却无法给与我这个结果

稍后我会把我测试的代码放上来
 
Blowfish.h
Blowfish.cpp
可以在刚才那个网址下载到[http://www.codeproject.com/cpp/blowfish.asp]
代码:
#include <iostream>
#include <fstream>
#include "Blowfish.h"

using namespace std;

void main()
{
	//TESTING Blowfish
	try
	{
		ofstream out("out.txt", ios::trunc);
		char ENCRYPTKEY[] = "[;'.]94-31==-%&@!^+]\0";
		unsigned char decrypted[] = {
		0x00,0x74,0x6f,0x72,0x75,0x6e,0x65,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,
		0x68,0x65,0x6e,0x77,0x65,0x69,0x00,0x00,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,
		0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
		0x78,0x16,0x64,0x6e,0x00,0x00,0x00,0x00
		};
		
		unsigned char encrypted[] = {	
		0xEA,0xC4,0x60,0x77,0x14,0x6A,0xBC,0x23,
		0x3B,0x36,0xFC,0x34,0xA0,0xDD,0x82,0xAF,
		0xD6,0x9E,0xAB,0x38,0x05,0xB1,0xE6,0x98,
		0x0D,0x2D,0x41,0x44,0x78,0x22,0x29,0xB6,
		0x76,0x62,0x4A,0x79,0xFE,0x01,0xED,0x06,
		0x51,0xE7,0x19,0xE1,0x35,0x1E,0xAA,0x19
		};
		unsigned char szDataOut[48];
		CBlowFish oBlowFish((unsigned char*)ENCRYPTKEY, sizeof(ENCRYPTKEY));
		//Test ECB
		oBlowFish.Encrypt(decrypted, (unsigned char*)szDataOut, sizeof(decrypted), CBlowFish::ECB);
		out <<szDataOut<<endl;
		
		memset(szDataOut,0,sizeof(szDataOut));
		oBlowFish.Decrypt(encrypted, (unsigned char*)szDataOut, sizeof(encrypted), CBlowFish::ECB);
		out <<szDataOut<<endl;
	}
	catch(exception& roException)
	{
	  cout << "Exception: " << roException.what() << endl;
	}
}
 
后退
顶部