数据通信之数据转码字节映射加密发送:客户端c++和服务器java
2014-07-14 17:00
337 查看
最近做个项目,服务器使用java开发的,客户端用c++,通信打包格式用的json,领导要求做个简单的加密,让数据看起来不是那么明显就好,于是乎想到了转码发送数据的方法,具体如下,
服务器(java):
由于是单向通信,所以服务器存放发送字节映射表
import java.io.UnsupportedEncodingException;
public class Encrypt {
/**
* 发送字节映射表
*/
private static byte[] m_SendByteMap = {
(byte) 0x70, (byte) 0x2F, (byte) 0x40, (byte) 0x5F, (byte) 0x44, (byte) 0x8E, (byte) 0x6E, (byte) 0x45, (byte) 0x7E, (byte) 0xAB,
(byte) 0x2C, (byte) 0x1F, (byte) 0xB4, (byte) 0xAC, (byte) 0x9D, (byte) 0x91, (byte) 0x0D, (byte) 0x36, (byte) 0x9B, (byte) 0x0B,
(byte) 0xD4, (byte) 0xC4, (byte) 0x39, (byte) 0x74, (byte) 0xBF, (byte) 0x23, (byte) 0x16, (byte) 0x14, (byte) 0x06, (byte) 0xEB,
//--30
(byte) 0x04, (byte) 0x3E, (byte) 0x12, (byte) 0x5C, (byte) 0x8B, (byte) 0xBC, (byte) 0x61, (byte) 0x63, (byte) 0xF6, (byte) 0xA5,
(byte) 0xE1, (byte) 0x65, (byte) 0xD8, (byte) 0xF5, (byte) 0x5A, (byte) 0x07, (byte) 0xF0, (byte) 0x13, (byte) 0xF2, (byte) 0x20,
//--50
(byte) 0x6B, (byte) 0x4A, (byte) 0x24, (byte) 0x59, (byte) 0x89, (byte) 0x64, (byte) 0xD7, (byte) 0x42, (byte) 0x6A, (byte) 0x5E,
(byte) 0x3D, (byte) 0x0A, (byte) 0x77, (byte) 0xE0, (byte) 0x80, (byte) 0x27, (byte) 0xB8, (byte) 0xC5, (byte) 0x8C, (byte) 0x0E,
(byte) 0xFA, (byte) 0x8A, (byte) 0xD5, (byte) 0x29, (byte) 0x56, (byte) 0x57, (byte) 0x6C, (byte) 0x53, (byte) 0x67, (byte) 0x41,
//--80
(byte) 0xE8, (byte) 0x00, (byte) 0x1A, (byte) 0xCE, (byte) 0x86, (byte) 0x83, (byte) 0xB0, (byte) 0x22, (byte) 0x28, (byte) 0x4D,
(byte) 0x3F, (byte) 0x26, (byte) 0x46, (byte) 0x4F, (byte) 0x6F, (byte) 0x2B, (byte) 0x72, (byte) 0x3A, (byte) 0xF1, (byte) 0x8D,
//--100
(byte) 0x97, (byte) 0x95, (byte) 0x49, (byte) 0x84, (byte) 0xE5, (byte) 0xE3, (byte) 0x79, (byte) 0x8F, (byte) 0x51, (byte) 0x10,
(byte) 0xA8, (byte) 0x82, (byte) 0xC6, (byte) 0xDD, (byte) 0xFF, (byte) 0xFC, (byte) 0xE4, (byte) 0xCF, (byte) 0xB3, (byte) 0x09,
//120
(byte) 0x5D, (byte) 0xEA, (byte) 0x9C, (byte) 0x34, (byte) 0xF9, (byte) 0x17, (byte) 0x9F, (byte) 0xDA, (byte) 0x87, (byte) 0xF8,
(byte) 0x15, (byte) 0x05, (byte) 0x3C, (byte) 0xD3, (byte) 0xA4, (byte) 0x85, (byte) 0x2E, (byte) 0xFB, (byte) 0xEE, (byte) 0x47,
//140
(byte) 0x3B, (byte) 0xEF, (byte) 0x37, (byte) 0x7F, (byte) 0x93, (byte) 0xAF, (byte) 0x69, (byte) 0x0C, (byte) 0x71, (byte) 0x31,
(byte) 0xDE, (byte) 0x21, (byte) 0x75, (byte) 0xA0, (byte) 0xAA, (byte) 0xBA, (byte) 0x7C, (byte) 0x38, (byte) 0x02, (byte) 0xB7,
//160
(byte) 0x81, (byte) 0x01, (byte) 0xFD, (byte) 0xE7, (byte) 0x1D, (byte) 0xCC, (byte) 0xCD, (byte) 0xBD, (byte) 0x1B, (byte) 0x7A,
(byte) 0x2A, (byte) 0xAD, (byte) 0x66, (byte) 0xBE, (byte) 0x55, (byte) 0x33, (byte) 0x03, (byte) 0xDB, (byte) 0x88, (byte) 0xB2,
//180
(byte) 0x1E, (byte) 0x4E, (byte) 0xB9, (byte) 0xE6, (byte) 0xC2, (byte) 0xF7, (byte) 0xCB, (byte) 0x7D, (byte) 0xC9, (byte) 0x62,
(byte) 0xC3, (byte) 0xA6, (byte) 0xDC, (byte) 0xA7, (byte) 0x50, (byte) 0xB5, (byte) 0x4B, (byte) 0x94, (byte) 0xC0, (byte) 0x92,
//200
(byte) 0x4C, (byte) 0x11, (byte) 0x5B, (byte) 0x78, (byte) 0xD9, (byte) 0xB1, (byte) 0xED, (byte) 0x19, (byte) 0xE9, (byte) 0xA1,
(byte) 0x1C, (byte) 0xB6, (byte) 0x32, (byte) 0x99, (byte) 0xA3, (byte) 0x76, (byte) 0x9E, (byte) 0x7B, (byte) 0x6D, (byte) 0x9A,
//220
(byte) 0x30, (byte) 0xD6, (byte) 0xA9, (byte) 0x25, (byte) 0xC7, (byte) 0xAE, (byte) 0x96, (byte) 0x35, (byte) 0xD0, (byte) 0xBB,
(byte) 0xD2, (byte) 0xC8, (byte) 0xA2, (byte) 0x08, (byte) 0xF3, (byte) 0xD1, (byte) 0x73, (byte) 0xF4, (byte) 0x48, (byte) 0x2D,
//240
(byte) 0x90, (byte) 0xCA, (byte) 0xE2, (byte) 0x58, (byte) 0xC1, (byte) 0x18, (byte) 0x52, (byte) 0xFE, (byte) 0xDF, (byte) 0x68,
(byte) 0x98, (byte) 0x54, (byte) 0xEC, (byte) 0x60, (byte) 0x43, (byte) 0x0F };
/**
* 发送数据时映射数据
*
* @param cbData
* byte
* @return byte
*/
static private byte mapSendByte(byte cbData) {
int index = -1;
if (cbData < 0) {
index = 256 + cbData;
}
else {
index = cbData;
}
if (index > 255) {
index -= 256;
}
byte cbMap = m_SendByteMap[index];
return cbMap;
}
/**
* 加密
* @param data
* @return
*/
public static byte[] encrypted(String data) {
try {
byte[] byteContent = data.getBytes("utf-8");
// 字节映射
for (int i = 0; i < byteContent.length; i++) {
byteContent[i] = mapSendByte(byteContent[i]);
}
return byteContent;
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
/**将二进制转换成16进制
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
}
在需要使用的地方加上几行代码即可
String json = "测试数据";
byte[] encryptByte = Encrypt.encrypted(json);
String tsr = Encrypt.parseByte2HexStr(encryptByte);
以上为服务器代码,下来看客户端代码,
unsigned char m_RecvByteMap[256];
unsigned char recvByteMap[256] = {
(byte) 0x51, (byte) 0xA1, (byte) 0x9E, (byte) 0xB0, (byte) 0x1E,
(byte) 0x83, (byte) 0x1C, (byte) 0x2D, (byte) 0xE9, (byte) 0x77,
//10
(byte) 0x3D, (byte) 0x13, (byte) 0x93, (byte) 0x10, (byte) 0x45,
(byte) 0xFF, (byte) 0x6D, (byte) 0xC9, (byte) 0x20, (byte) 0x2F,
//20
(byte) 0x1B, (byte) 0x82, (byte) 0x1A, (byte) 0x7D, (byte) 0xF5,
(byte) 0xCF, (byte) 0x52, (byte) 0xA8, (byte) 0xD2, (byte) 0xA4,
//30
(byte) 0xB4, (byte) 0x0B, (byte) 0x31, (byte) 0x97, (byte) 0x57,
(byte) 0x19, (byte) 0x34, (byte) 0xDF, (byte) 0x5B, (byte) 0x41,
//40
(byte) 0x58, (byte) 0x49, (byte) 0xAA, (byte) 0x5F, (byte) 0x0A,
(byte) 0xEF, (byte) 0x88, (byte) 0x01, (byte) 0xDC, (byte) 0x95,
//50
(byte) 0xD4, (byte) 0xAF, (byte) 0x7B, (byte) 0xE3, (byte) 0x11,
(byte) 0x8E, (byte) 0x9D, (byte) 0x16, (byte) 0x61, (byte) 0x8C,
//60
(byte) 0x84, (byte) 0x3C, (byte) 0x1F, (byte) 0x5A, (byte) 0x02,
(byte) 0x4F, (byte) 0x39, (byte) 0xFE, (byte) 0x04, (byte) 0x07,
//70
(byte) 0x5C, (byte) 0x8B, (byte) 0xEE, (byte) 0x66, (byte) 0x33,
(byte) 0xC4, (byte) 0xC8, (byte) 0x59, (byte) 0xB5, (byte) 0x5D,
//80
(byte) 0xC2, (byte) 0x6C, (byte) 0xF6, (byte) 0x4D, (byte) 0xFB,
(byte) 0xAE, (byte) 0x4A, (byte) 0x4B, (byte) 0xF3, (byte) 0x35,
//90
(byte) 0x2C, (byte) 0xCA, (byte) 0x21, (byte) 0x78, (byte) 0x3B,
(byte) 0x03, (byte) 0xFD, (byte) 0x24, (byte) 0xBD, (byte) 0x25,
//100
(byte) 0x37, (byte) 0x29, (byte) 0xAC, (byte) 0x4E, (byte) 0xF9,
(byte) 0x92, (byte) 0x3A, (byte) 0x32, (byte) 0x4C, (byte) 0xDA,
//110
(byte) 0x06, (byte) 0x5E, (byte) 0x00, (byte) 0x94, (byte) 0x60,
(byte) 0xEC, (byte) 0x17, (byte) 0x98, (byte) 0xD7, (byte) 0x3E,
//120
(byte) 0xCB, (byte) 0x6A, (byte) 0xA9, (byte) 0xD9, (byte) 0x9C,
(byte) 0xBB, (byte) 0x08, (byte) 0x8F, (byte) 0x40, (byte) 0xA0,
//130
(byte) 0x6F, (byte) 0x55, (byte) 0x67, (byte) 0x87, (byte) 0x54,
(byte) 0x80, (byte) 0xB2, (byte) 0x36, (byte) 0x47, (byte) 0x22,
//140
(byte) 0x44, (byte) 0x63, (byte) 0x05, (byte) 0x6B, (byte) 0xF0,
(byte) 0x0F, (byte) 0xC7, (byte) 0x90, (byte) 0xC5, (byte) 0x65,
//150
(byte) 0xE2, (byte) 0x64, (byte) 0xFA, (byte) 0xD5, (byte) 0xDB,
(byte) 0x12, (byte) 0x7A, (byte) 0x0E, (byte) 0xD8, (byte) 0x7E,
//160
(byte) 0x99, (byte) 0xD1, (byte) 0xE8, (byte) 0xD6, (byte) 0x86,
(byte) 0x27, (byte) 0xBF, (byte) 0xC1, (byte) 0x6E, (byte) 0xDE,
//170
(byte) 0x9A, (byte) 0x09, (byte) 0x0D, (byte) 0xAB, (byte) 0xE1,
(byte) 0x91, (byte) 0x56, (byte) 0xCD, (byte) 0xB3, (byte) 0x76,
//180
(byte) 0x0C, (byte) 0xC3, (byte) 0xD3, (byte) 0x9F, (byte) 0x42,
(byte) 0xB6, (byte) 0x9B, (byte) 0xE5, (byte) 0x23, (byte) 0xA7,
//190
(byte) 0xAD, (byte) 0x18, (byte) 0xC6, (byte) 0xF4, (byte) 0xB8,
(byte) 0xBE, (byte) 0x15, (byte) 0x43, (byte) 0x70, (byte) 0xE0,
//200
(byte) 0xE7, (byte) 0xBC, (byte) 0xF1, (byte) 0xBA, (byte) 0xA5,
(byte) 0xA6, (byte) 0x53, (byte) 0x75, (byte) 0xE4, (byte) 0xEB,
//210
(byte) 0xE6, (byte) 0x85, (byte) 0x14, (byte) 0x48, (byte) 0xDD,
(byte) 0x38, (byte) 0x2A, (byte) 0xCC, (byte) 0x7F, (byte) 0xB1,
//220
(byte) 0xC0, (byte) 0x71, (byte) 0x96, (byte) 0xF8, (byte) 0x3F,
(byte) 0x28, (byte) 0xF2, (byte) 0x69, (byte) 0x74, (byte) 0x68,
//230
(byte) 0xB7, (byte) 0xA3, (byte) 0x50, (byte) 0xD0, (byte) 0x79,
(byte) 0x1D, (byte) 0xFC, (byte) 0xCE, (byte) 0x8A, (byte) 0x8D,
//240
(byte) 0x2E, (byte) 0x62, (byte) 0x30, (byte) 0xEA, (byte) 0xED,
(byte) 0x2B, (byte) 0x26, (byte) 0xB9, (byte) 0x81, (byte) 0x7C,
//250
(byte) 0x46, (byte) 0x89, (byte) 0x73, (byte) 0xA2, (byte) 0xF7,
(byte) 0x72 };
memcpy(m_RecvByteMap, recvByteMap, 256);
void XXXX::NetCallBackFuncByServer(CCHttpClient* client, CCHttpResponse* response)
{
//--从服务器获取的数据
std::vector<char> *buffer = response->getResponseData();
std::string bufffff(buffer->begin(),buffer->end());
//--进行转码
std::vector<char>* buf = new std::vector<char>;
parseHexStr2Byte(buf, bufffff.c_str(), bufffff.length());
CCLOG("parseHexStr2Byte end");
//--RecvByteMap
vector<char>::iterator iter = buf->begin();
while (iter != buf->end())
{
*iter = (unsigned char)mapRecvByte(*iter);
iter++;
}
std::string outBuf(buf->begin(),buf->end());
const char* outData = outBuf.c_str();
CCLOG("outData = %s", outData);
}
unsigned char XXXX::mapRecvByte(char cbData) {
int index = cbData;
if (index < 0) {
index += 256;
}
unsigned char cbMap = m_RecvByteMap[index];
return cbMap;
}
void XXXX::parseHexStr2Byte(std::vector<char>* outData, const char* data, int length) {
CCLOG("length = %d", length);
if (length < 1)
return;
char highByte, lowByte, outByte;
for (int i = 0; i < length / 2; i++) {
highByte = data[i * 2];
lowByte = data[i * 2 + 1];
CCLOG("**********************************************");
CCLOG("old ----highByte = %d, lowByte = %d", highByte, lowByte);
if (highByte > 0x39)
highByte -= 0x37;
else
highByte -= 0x30;
if (lowByte > 0x39)
lowByte -= 0x37;
else
lowByte -= 0x30;
CCLOG("new ------highByte = %d, lowByte = %d", highByte, lowByte);
outByte = (highByte << 4) | lowByte;
CCLOG("%d---outByte = %d", i, outByte);
outData->push_back(outByte);
}
}
Ok!代码上传完毕,需要注意的是数据的二进制和十六进制的转换,映射对应表必须一一对应,否则就会出错了。
初次写博客,不好的地方,希望大家指出,不要喷。谢谢谅解。
服务器(java):
由于是单向通信,所以服务器存放发送字节映射表
import java.io.UnsupportedEncodingException;
public class Encrypt {
/**
* 发送字节映射表
*/
private static byte[] m_SendByteMap = {
(byte) 0x70, (byte) 0x2F, (byte) 0x40, (byte) 0x5F, (byte) 0x44, (byte) 0x8E, (byte) 0x6E, (byte) 0x45, (byte) 0x7E, (byte) 0xAB,
(byte) 0x2C, (byte) 0x1F, (byte) 0xB4, (byte) 0xAC, (byte) 0x9D, (byte) 0x91, (byte) 0x0D, (byte) 0x36, (byte) 0x9B, (byte) 0x0B,
(byte) 0xD4, (byte) 0xC4, (byte) 0x39, (byte) 0x74, (byte) 0xBF, (byte) 0x23, (byte) 0x16, (byte) 0x14, (byte) 0x06, (byte) 0xEB,
//--30
(byte) 0x04, (byte) 0x3E, (byte) 0x12, (byte) 0x5C, (byte) 0x8B, (byte) 0xBC, (byte) 0x61, (byte) 0x63, (byte) 0xF6, (byte) 0xA5,
(byte) 0xE1, (byte) 0x65, (byte) 0xD8, (byte) 0xF5, (byte) 0x5A, (byte) 0x07, (byte) 0xF0, (byte) 0x13, (byte) 0xF2, (byte) 0x20,
//--50
(byte) 0x6B, (byte) 0x4A, (byte) 0x24, (byte) 0x59, (byte) 0x89, (byte) 0x64, (byte) 0xD7, (byte) 0x42, (byte) 0x6A, (byte) 0x5E,
(byte) 0x3D, (byte) 0x0A, (byte) 0x77, (byte) 0xE0, (byte) 0x80, (byte) 0x27, (byte) 0xB8, (byte) 0xC5, (byte) 0x8C, (byte) 0x0E,
(byte) 0xFA, (byte) 0x8A, (byte) 0xD5, (byte) 0x29, (byte) 0x56, (byte) 0x57, (byte) 0x6C, (byte) 0x53, (byte) 0x67, (byte) 0x41,
//--80
(byte) 0xE8, (byte) 0x00, (byte) 0x1A, (byte) 0xCE, (byte) 0x86, (byte) 0x83, (byte) 0xB0, (byte) 0x22, (byte) 0x28, (byte) 0x4D,
(byte) 0x3F, (byte) 0x26, (byte) 0x46, (byte) 0x4F, (byte) 0x6F, (byte) 0x2B, (byte) 0x72, (byte) 0x3A, (byte) 0xF1, (byte) 0x8D,
//--100
(byte) 0x97, (byte) 0x95, (byte) 0x49, (byte) 0x84, (byte) 0xE5, (byte) 0xE3, (byte) 0x79, (byte) 0x8F, (byte) 0x51, (byte) 0x10,
(byte) 0xA8, (byte) 0x82, (byte) 0xC6, (byte) 0xDD, (byte) 0xFF, (byte) 0xFC, (byte) 0xE4, (byte) 0xCF, (byte) 0xB3, (byte) 0x09,
//120
(byte) 0x5D, (byte) 0xEA, (byte) 0x9C, (byte) 0x34, (byte) 0xF9, (byte) 0x17, (byte) 0x9F, (byte) 0xDA, (byte) 0x87, (byte) 0xF8,
(byte) 0x15, (byte) 0x05, (byte) 0x3C, (byte) 0xD3, (byte) 0xA4, (byte) 0x85, (byte) 0x2E, (byte) 0xFB, (byte) 0xEE, (byte) 0x47,
//140
(byte) 0x3B, (byte) 0xEF, (byte) 0x37, (byte) 0x7F, (byte) 0x93, (byte) 0xAF, (byte) 0x69, (byte) 0x0C, (byte) 0x71, (byte) 0x31,
(byte) 0xDE, (byte) 0x21, (byte) 0x75, (byte) 0xA0, (byte) 0xAA, (byte) 0xBA, (byte) 0x7C, (byte) 0x38, (byte) 0x02, (byte) 0xB7,
//160
(byte) 0x81, (byte) 0x01, (byte) 0xFD, (byte) 0xE7, (byte) 0x1D, (byte) 0xCC, (byte) 0xCD, (byte) 0xBD, (byte) 0x1B, (byte) 0x7A,
(byte) 0x2A, (byte) 0xAD, (byte) 0x66, (byte) 0xBE, (byte) 0x55, (byte) 0x33, (byte) 0x03, (byte) 0xDB, (byte) 0x88, (byte) 0xB2,
//180
(byte) 0x1E, (byte) 0x4E, (byte) 0xB9, (byte) 0xE6, (byte) 0xC2, (byte) 0xF7, (byte) 0xCB, (byte) 0x7D, (byte) 0xC9, (byte) 0x62,
(byte) 0xC3, (byte) 0xA6, (byte) 0xDC, (byte) 0xA7, (byte) 0x50, (byte) 0xB5, (byte) 0x4B, (byte) 0x94, (byte) 0xC0, (byte) 0x92,
//200
(byte) 0x4C, (byte) 0x11, (byte) 0x5B, (byte) 0x78, (byte) 0xD9, (byte) 0xB1, (byte) 0xED, (byte) 0x19, (byte) 0xE9, (byte) 0xA1,
(byte) 0x1C, (byte) 0xB6, (byte) 0x32, (byte) 0x99, (byte) 0xA3, (byte) 0x76, (byte) 0x9E, (byte) 0x7B, (byte) 0x6D, (byte) 0x9A,
//220
(byte) 0x30, (byte) 0xD6, (byte) 0xA9, (byte) 0x25, (byte) 0xC7, (byte) 0xAE, (byte) 0x96, (byte) 0x35, (byte) 0xD0, (byte) 0xBB,
(byte) 0xD2, (byte) 0xC8, (byte) 0xA2, (byte) 0x08, (byte) 0xF3, (byte) 0xD1, (byte) 0x73, (byte) 0xF4, (byte) 0x48, (byte) 0x2D,
//240
(byte) 0x90, (byte) 0xCA, (byte) 0xE2, (byte) 0x58, (byte) 0xC1, (byte) 0x18, (byte) 0x52, (byte) 0xFE, (byte) 0xDF, (byte) 0x68,
(byte) 0x98, (byte) 0x54, (byte) 0xEC, (byte) 0x60, (byte) 0x43, (byte) 0x0F };
/**
* 发送数据时映射数据
*
* @param cbData
* byte
* @return byte
*/
static private byte mapSendByte(byte cbData) {
int index = -1;
if (cbData < 0) {
index = 256 + cbData;
}
else {
index = cbData;
}
if (index > 255) {
index -= 256;
}
byte cbMap = m_SendByteMap[index];
return cbMap;
}
/**
* 加密
* @param data
* @return
*/
public static byte[] encrypted(String data) {
try {
byte[] byteContent = data.getBytes("utf-8");
// 字节映射
for (int i = 0; i < byteContent.length; i++) {
byteContent[i] = mapSendByte(byteContent[i]);
}
return byteContent;
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
/**将二进制转换成16进制
* @param buf
* @return
*/
public static String parseByte2HexStr(byte buf[]) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < buf.length; i++) {
String hex = Integer.toHexString(buf[i] & 0xFF);
if (hex.length() == 1) {
hex = '0' + hex;
}
sb.append(hex.toUpperCase());
}
return sb.toString();
}
}
在需要使用的地方加上几行代码即可
String json = "测试数据";
byte[] encryptByte = Encrypt.encrypted(json);
String tsr = Encrypt.parseByte2HexStr(encryptByte);
以上为服务器代码,下来看客户端代码,
unsigned char m_RecvByteMap[256];
unsigned char recvByteMap[256] = {
(byte) 0x51, (byte) 0xA1, (byte) 0x9E, (byte) 0xB0, (byte) 0x1E,
(byte) 0x83, (byte) 0x1C, (byte) 0x2D, (byte) 0xE9, (byte) 0x77,
//10
(byte) 0x3D, (byte) 0x13, (byte) 0x93, (byte) 0x10, (byte) 0x45,
(byte) 0xFF, (byte) 0x6D, (byte) 0xC9, (byte) 0x20, (byte) 0x2F,
//20
(byte) 0x1B, (byte) 0x82, (byte) 0x1A, (byte) 0x7D, (byte) 0xF5,
(byte) 0xCF, (byte) 0x52, (byte) 0xA8, (byte) 0xD2, (byte) 0xA4,
//30
(byte) 0xB4, (byte) 0x0B, (byte) 0x31, (byte) 0x97, (byte) 0x57,
(byte) 0x19, (byte) 0x34, (byte) 0xDF, (byte) 0x5B, (byte) 0x41,
//40
(byte) 0x58, (byte) 0x49, (byte) 0xAA, (byte) 0x5F, (byte) 0x0A,
(byte) 0xEF, (byte) 0x88, (byte) 0x01, (byte) 0xDC, (byte) 0x95,
//50
(byte) 0xD4, (byte) 0xAF, (byte) 0x7B, (byte) 0xE3, (byte) 0x11,
(byte) 0x8E, (byte) 0x9D, (byte) 0x16, (byte) 0x61, (byte) 0x8C,
//60
(byte) 0x84, (byte) 0x3C, (byte) 0x1F, (byte) 0x5A, (byte) 0x02,
(byte) 0x4F, (byte) 0x39, (byte) 0xFE, (byte) 0x04, (byte) 0x07,
//70
(byte) 0x5C, (byte) 0x8B, (byte) 0xEE, (byte) 0x66, (byte) 0x33,
(byte) 0xC4, (byte) 0xC8, (byte) 0x59, (byte) 0xB5, (byte) 0x5D,
//80
(byte) 0xC2, (byte) 0x6C, (byte) 0xF6, (byte) 0x4D, (byte) 0xFB,
(byte) 0xAE, (byte) 0x4A, (byte) 0x4B, (byte) 0xF3, (byte) 0x35,
//90
(byte) 0x2C, (byte) 0xCA, (byte) 0x21, (byte) 0x78, (byte) 0x3B,
(byte) 0x03, (byte) 0xFD, (byte) 0x24, (byte) 0xBD, (byte) 0x25,
//100
(byte) 0x37, (byte) 0x29, (byte) 0xAC, (byte) 0x4E, (byte) 0xF9,
(byte) 0x92, (byte) 0x3A, (byte) 0x32, (byte) 0x4C, (byte) 0xDA,
//110
(byte) 0x06, (byte) 0x5E, (byte) 0x00, (byte) 0x94, (byte) 0x60,
(byte) 0xEC, (byte) 0x17, (byte) 0x98, (byte) 0xD7, (byte) 0x3E,
//120
(byte) 0xCB, (byte) 0x6A, (byte) 0xA9, (byte) 0xD9, (byte) 0x9C,
(byte) 0xBB, (byte) 0x08, (byte) 0x8F, (byte) 0x40, (byte) 0xA0,
//130
(byte) 0x6F, (byte) 0x55, (byte) 0x67, (byte) 0x87, (byte) 0x54,
(byte) 0x80, (byte) 0xB2, (byte) 0x36, (byte) 0x47, (byte) 0x22,
//140
(byte) 0x44, (byte) 0x63, (byte) 0x05, (byte) 0x6B, (byte) 0xF0,
(byte) 0x0F, (byte) 0xC7, (byte) 0x90, (byte) 0xC5, (byte) 0x65,
//150
(byte) 0xE2, (byte) 0x64, (byte) 0xFA, (byte) 0xD5, (byte) 0xDB,
(byte) 0x12, (byte) 0x7A, (byte) 0x0E, (byte) 0xD8, (byte) 0x7E,
//160
(byte) 0x99, (byte) 0xD1, (byte) 0xE8, (byte) 0xD6, (byte) 0x86,
(byte) 0x27, (byte) 0xBF, (byte) 0xC1, (byte) 0x6E, (byte) 0xDE,
//170
(byte) 0x9A, (byte) 0x09, (byte) 0x0D, (byte) 0xAB, (byte) 0xE1,
(byte) 0x91, (byte) 0x56, (byte) 0xCD, (byte) 0xB3, (byte) 0x76,
//180
(byte) 0x0C, (byte) 0xC3, (byte) 0xD3, (byte) 0x9F, (byte) 0x42,
(byte) 0xB6, (byte) 0x9B, (byte) 0xE5, (byte) 0x23, (byte) 0xA7,
//190
(byte) 0xAD, (byte) 0x18, (byte) 0xC6, (byte) 0xF4, (byte) 0xB8,
(byte) 0xBE, (byte) 0x15, (byte) 0x43, (byte) 0x70, (byte) 0xE0,
//200
(byte) 0xE7, (byte) 0xBC, (byte) 0xF1, (byte) 0xBA, (byte) 0xA5,
(byte) 0xA6, (byte) 0x53, (byte) 0x75, (byte) 0xE4, (byte) 0xEB,
//210
(byte) 0xE6, (byte) 0x85, (byte) 0x14, (byte) 0x48, (byte) 0xDD,
(byte) 0x38, (byte) 0x2A, (byte) 0xCC, (byte) 0x7F, (byte) 0xB1,
//220
(byte) 0xC0, (byte) 0x71, (byte) 0x96, (byte) 0xF8, (byte) 0x3F,
(byte) 0x28, (byte) 0xF2, (byte) 0x69, (byte) 0x74, (byte) 0x68,
//230
(byte) 0xB7, (byte) 0xA3, (byte) 0x50, (byte) 0xD0, (byte) 0x79,
(byte) 0x1D, (byte) 0xFC, (byte) 0xCE, (byte) 0x8A, (byte) 0x8D,
//240
(byte) 0x2E, (byte) 0x62, (byte) 0x30, (byte) 0xEA, (byte) 0xED,
(byte) 0x2B, (byte) 0x26, (byte) 0xB9, (byte) 0x81, (byte) 0x7C,
//250
(byte) 0x46, (byte) 0x89, (byte) 0x73, (byte) 0xA2, (byte) 0xF7,
(byte) 0x72 };
memcpy(m_RecvByteMap, recvByteMap, 256);
void XXXX::NetCallBackFuncByServer(CCHttpClient* client, CCHttpResponse* response)
{
//--从服务器获取的数据
std::vector<char> *buffer = response->getResponseData();
std::string bufffff(buffer->begin(),buffer->end());
//--进行转码
std::vector<char>* buf = new std::vector<char>;
parseHexStr2Byte(buf, bufffff.c_str(), bufffff.length());
CCLOG("parseHexStr2Byte end");
//--RecvByteMap
vector<char>::iterator iter = buf->begin();
while (iter != buf->end())
{
*iter = (unsigned char)mapRecvByte(*iter);
iter++;
}
std::string outBuf(buf->begin(),buf->end());
const char* outData = outBuf.c_str();
CCLOG("outData = %s", outData);
}
unsigned char XXXX::mapRecvByte(char cbData) {
int index = cbData;
if (index < 0) {
index += 256;
}
unsigned char cbMap = m_RecvByteMap[index];
return cbMap;
}
void XXXX::parseHexStr2Byte(std::vector<char>* outData, const char* data, int length) {
CCLOG("length = %d", length);
if (length < 1)
return;
char highByte, lowByte, outByte;
for (int i = 0; i < length / 2; i++) {
highByte = data[i * 2];
lowByte = data[i * 2 + 1];
CCLOG("**********************************************");
CCLOG("old ----highByte = %d, lowByte = %d", highByte, lowByte);
if (highByte > 0x39)
highByte -= 0x37;
else
highByte -= 0x30;
if (lowByte > 0x39)
lowByte -= 0x37;
else
lowByte -= 0x30;
CCLOG("new ------highByte = %d, lowByte = %d", highByte, lowByte);
outByte = (highByte << 4) | lowByte;
CCLOG("%d---outByte = %d", i, outByte);
outData->push_back(outByte);
}
}
Ok!代码上传完毕,需要注意的是数据的二进制和十六进制的转换,映射对应表必须一一对应,否则就会出错了。
初次写博客,不好的地方,希望大家指出,不要喷。谢谢谅解。
相关文章推荐
- 数据通信之数据转码字节映射加密发送:客户端c++和服务器java
- java_多线程_socket通信_多个客户端发送,服务器响应
- android客户端与javaweb服务器端数据通信-异步Get
- java客户端向服务器发送数据
- java客户端与服务器连接并发送数据
- c++做服务器,java当客户端,采用 tcp协议之相互通信demo
- java客户端数据发送到服务器(POST请求)总结
- android客户端与javaweb服务器端数据通信-Post-键值对
- Android简单实现Socket通信,客户端连接服务器后,服务器向客户端发送文字数据
- iOS客户端发送json数据,java(servlet)服务器接受json数据
- 使用RSA对C++ 客户端和 PHP 服务端之间通信的数据进行加密
- java本地客户端与服务器连接并相互发送数据
- android客户端与javaweb服务器端数据通信-Post-Json格式数据
- socket通信,TCP协议,有多个客户端,服务器怎么向指定IP及端口的客户端发送数据!
- Java编写一个简单的TCP通信程序。服务器发送一条字符串,客户端接收该信息并显示。
- 用java在客户端读取mongodb中的数据并发送至服务器
- Java客户端向twisted服务器发送数据中遇到的问题
- JS模拟APP客户端向服务器POST RSA加密的通信数据
- C++写的服务器与Java写的客户端通过Socket通信(源代码)
- java 客户端与c++服务器端tcp通信 demo