69,664
社区成员
发帖
与我相关
我的任务
分享
int des_set_key( des_context *ctx, uint8 key[8] );
int des3_set_2keys( des3_context *ctx, uint8 key1[8], uint8 key2[8] );
int des3_set_3keys( des3_context *ctx, uint8 key1[8], uint8 key2[8], uint8 key3[8] );
void des_encrypt( des_context *ctx, uint8 input[8], uint8 output[8] );
void des_decrypt( des_context *ctx, uint8 input[8], uint8 output[8] );
void des3_encrypt( des3_context *ctx, uint8 input[8], uint8 output[8] );
void des3_decrypt( des3_context *ctx, uint8 input[8], uint8 output[8] );
void Encrypt(const char* keys,const char*inputs,uint8 *Output)
{
//准备密钥
uint8 Key[16];
memset(Key,0,sizeof(Key));
CovertToBytes(Key,sizeof(Key)/sizeof(uint8),keys);
//准备数据
int len = strlen(inputs);
//不是八的倍数
if(len % 8!=0)
{
//补充后长度
len=((len-len%8)/8+1)*8;
}
uint8 *Input = new uint8[len/2];
memset(Input,0,sizeof(Input));
CovertToBytes(Input,len/2,inputs);
//加密
des3_context ctx;
des3_set_2keys(&ctx, Key, Key+8);
//按照上面描述的,应该再这里8字节一组进行加密,不知道我这么写对不对?
for(int i=0;i<len/2;i+=8)
{
uint8 temp[8];
uint8 otemp[8];
//每次取8字节
memcpy(otemp,&Input[i],sizeof(otemp));
des3_encrypt(&ctx, otemp, temp);
memcpy(&Output[i],temp,sizeof(temp));
}
delete Input;
}