代码插件测试
如果看到代码是完整且整齐的,则说明插件测试成功.
/*
* 功能描述: DES单元运算
* 参数列表: Out - 8字节运算结果
* In - 8字节数据
* pSubKey - 过程密钥
* Typde - {ENCRYPT(加密),DECRYPT(解密)}
* 返 回 值: 无
*/
void SingleDes(char Out[8], char In[8], char Type)
{
int i = 0;
char M[64], tmp[32];
char *Li = &M[0];
char *Ri = &M[32];
memset(M, 0, sizeof(char)*sizeof(M));
memset(tmp, 0, sizeof(char)*sizeof(tmp));
ByteToBit(M, In, 64);
Transform(M, M, IP_Table, 64); //初始置换(IP置换)
if( Type == ENCRYPT )
{
for(i=0; i<16; i++)
{
memcpy(tmp, Ri, 32); //保存右半部分
F_func(Ri, (*pSubKey)[i]); //对右半部分和密钥进行操作
Xor(Ri, Li, 32); //右半部分与左半部分异或操作
memcpy(Li, tmp, 32); //原来的右半部分放至左半部分
}
}
else
{
for(i=15; i>=0; i--) //加密和解密只是顺序不同
{
memcpy(tmp, Ri, 32);
F_func(Ri, (*pSubKey)[i]);
Xor(Ri, Li, 32);
memcpy(Li, tmp, 32);
}
}
RotateL(M,64,32); //左右交换(循环移位)
Transform(M, M, IPR_Table, 64); //逆初值置换(IPR置换)
BitToByte(Out, M, 64); //bit流转换为字节
}