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] です。
どうしたの?誰かが私を助けることができますか?ありがとう!。