int des_enc(const string &desKey, const string &data, int mode, const string &iv, string &encData)
{
int keyLen = 0, x = 0;
long dataLen = 0;
DES_key_schedule ks1, ks2, ks3;
unsigned char tmpData[8], ke1[8], ke2[8], ke3[8], ivec[8];
unsigned char input[BUFFER_SIZE], output[BUFFER_SIZE];
keyLen = desKey.length();
dataLen = data.length();
if (keyLen == 0 || dataLen == 0)
return -1;
memset(input, 0, BUFFER_SIZE);
memset(output, 0, BUFFER_SIZE);
memcpy(input, data.c_str(), dataLen);
switch (keyLen)
{
case 8:
{
memset(ke1, 0, 8);
memcpy(ke1, desKey.c_str(), 8);
DES_set_key_unchecked((const_DES_cblock*)ke1, &ks1);
switch (mode){
case CBC:
{
memcpy(ivec, iv.c_str(), 8);
DES_cbc_encrypt(input, output, dataLen, &ks1, (DES_cblock *)ivec, DES_ENCRYPT);
break;
}
}
break;
}
}
if (dataLen > 0)
{
string result((char *)output, dataLen);
encData = result;
}
return dataLen;
}
main:
const string desKey="11111111";
const string data="11111111";
int mode=CBC;
const string iv="11111111";
string encData;
int dataLen=des_enc(desKey,data,mode,iv,encData);
char dist[32]={0};
HexToStr(dist,(unsigned char *)encData.c_str(),encData.length());
cout<<"encData="<<dist<<endl