1

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ファイルで16進コンテンツ[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 ファイルの 16 進数の内容は [96 d0 02 88 78 d5 8c 89 68 ea 5b c0 69 b1 20 97] です。

どうしたの?誰かが私を助けることができますか?ありがとう!。

4

0 に答える 0