Python OpenSSL加密,Pydes解密
我正在使用OpenSSL API加密我的字符串,但我无法解密pydes使用的字符串。然后我使用不同的方法加密同一字符串,但没有得到相同的结果 C++代码Python OpenSSL加密,Pydes解密,python,openssl,des,Python,Openssl,Des,我正在使用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 *K
#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.en1文件中的[96 d0 02 88 78 d5 8c 89 68 ea 5b c0 69 b1 20 97]
怎么了?有人能帮我吗?谢谢 我明白了。当我使用DES_string_to_key来处理密钥时,我得到的密钥与pydes中使用的密钥不同。更改以下代码:DES_string_为_键(键1和键1);DES_string_至_键(键2和键2);DES_string_至_键(键3和键3);收件人:memcpy(&key1,key1,8);memcpy(&key2,key2,8);memcpy(&key3,key3,8);然后问题就解决了。
#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)