Python OpenSSL加密,Pydes解密

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

我正在使用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.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)