C++转C#,很少代码,求救
1、
unsigned char ChgByte_data(unsigned char bData)
{
unsigned char a,b;
a= (bData & 0x0f)<<4;
b= (bData & 0xf0)>>4;
return (a+b);
}
2、
void Decryption_data(unsigned char *key, unsigned char *s_text, unsigned char *d_text, unsigned int dataLength)
{
while(dataLength >= 8)
{
Decryption(&key[0],&s_text[0],&d_text[0]); // 解密
dataLength -= 8;
s_text += 8;
d_text +=8;
}
}
3、
unsigned char getMAC(unsigned char *pData, unsigned char dataLength,unsigned char *pKey,unsigned char keyLen,unsigned char bFlag,unsigned char *pMAC)
{
unsigned char gRand[8];
unsigned char macData[8];
unsigned char i;
unsigned char *pDecryptKey;
unsigned char len;
// 初始值为xxxx0000
for(i = 0; i < 8; i++)
{
gRand[i] = mac_init[i];
}
// 开始计MAC
while(dataLength >= 8)
{
memcpy(macData, pData, 8);
for(i = 0; i < 8; i++)
{
gRand[i] = macData[i] ^ gRand[i];
}
// 用密钥的前半部来进行加密操作
Encryption(&pKey[0],&gRand[0],&gRand[0]); // 加密
dataLength -= 8;
pData += 8;
}
// 处理最后一个Dn
memcpy(macData, pData, dataLength);
macData[dataLength] = 0x80;
len = 8 - dataLength - 1;
for(i = 0; i < len; i++)
{
macData[i+dataLength+1]= 0x00;
}
for(i = 0; i < 8; i++)
{
gRand[i] = macData[i] ^ gRand[i];
}
// 用密钥的前半部来进行加密操作,
Encryption(&pKey[0],&gRand[0],&gRand[0]); // 加密
// 如果key为16位
if(keyLen == LONG_KEY_LENGTH)
{
pDecryptKey = pKey + 8; // 16字节密钥右半部分解密
Decryption(pDecryptKey,&gRand[0],&gRand[0]); // 解密
Encryption(&pKey[0],&gRand[0],&gRand[0]); // 加密
}
memcpy(pMAC, gRand, 4);
return(true);
}
谢谢各位大神