我正在使用 OpenSSL API 加密我的字符串,但我无法解密 pydes 使用的它。然后我使用不同的方法加密了相同的字符串,但没有得到相同的结果。
C++ 代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/des.h>
#include <openssl/rand.h>
int Encrypt( char ** Out,char *Key1,char *Key2,char *Key3, char *Msg, int size)
{
unsigned char* Res;
DES_cblock key1, key2, key3;
DES_cblock ivsetup = {'\0', '\0', '\0', '\0', '\0','\0', '\0', '\0'};
DES_cblock ivec;
DES_key_schedule ks1, ks2, ks3;
DES_string_to_key (Key1, &key1);
DES_string_to_key (Key2, &key2);
DES_string_to_key (Key3, &key3);
DES_set_key((DES_cblock *)key1, &ks1);
DES_set_key((DES_cblock *)key2, &ks2);
DES_set_key((DES_cblock *)key3, &ks3);
int len =size ;
short spure=len%8;
if(spure!=0 ){
len=(len+8-spure);
}
Res=( char * ) malloc(len*sizeof(char));
bzero( Res, len);
unsigned char * InBuffer=( char * ) malloc(len*sizeof(char));
bzero( InBuffer, len);
memcpy( InBuffer,Msg,size );
memcpy(ivec, ivsetup, sizeof(ivsetup));
DES_ede3_cbc_encrypt(InBuffer, Res, len, &ks1, &ks2, &ks3, &ivec, DES_ENCRYPT);
free( InBuffer );
*Out=Res;
return len;
}
int main(void)
{
char key1[]="12345678"; //
char key2[]="12345678"; //
char key3[]="12345678"; //16
char clear[]="1234567887654321";
char *decrypted;
FILE *fp;
printf("In Main, Plain text\t : %s %d\n",clear,strlen( clear ));
int len=Encrypt(&encrypted,key1,key2,key3,clear,strlen(clear));
if((fp=fopen( "./test.des.en","wb"))!=NULL ){
fwrite(encrypted,len,1,fp );
fclose( fp );
}
free( encrypted );
exit(0);
}
我在 test.des.en 文件中得到十六进制内容 [3d 90 07 5d 36 3e ba 0b d1 72 68 e0 30 20 74 f0]。
我正在使用 Pydes 加密相同的字符串。
Python代码:
#coding:utf-8
from pyDes import *
k = triple_des("123456781234567812345678", CBC, "\0\0\0\0\0\0\0\0", pad='\0', padmode=PAD_NORMAL)
d = k.encrypt("1234567887654321")
outfile = open('./test.des.en1','wb')
outfile.write(d)
test.des.en1 文件中的十六进制内容为 [96 d0 02 88 78 d5 8c 89 68 ea 5b c0 69 b1 20 97]。
怎么了?有人能帮我吗?谢谢!。