OpenSSL ECB 문제를 사용하여 비 64 비트 복수 일반 텍스트를 암호화하고 해독하려고 할 때 문제가 있습니다.OpenSSL ECB 비 64 비트 복수 일반 텍스트
나는 두 개의 .c 파일을 가지고 있는데, 하나는 암호화하고 다른 하나는 해독합니다.
이것은 첫 번째 것입니다.
// FILE ENCRYPTION
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <openssl/des.h>
#include <sys/types.h>
void merror(char *msg) {
perror(msg);
exit(0);
}
char *Encriptar(char *Key, char *Msg, int size) {
static char* Res;
int n=0;
DES_cblock Key2;
DES_key_schedule schedule;
Res = (char *) malloc(size);
memcpy(Key2, Key,8);
DES_set_odd_parity(&Key2);
DES_set_key_checked(&Key2, &schedule);
DES_ecb_encrypt((unsigned char *)Msg, (unsigned char *)Res, &schedule,DES_ENCRYPT);
return (Res);
}
#define LINELEN 8
int main(int argc, char *argv[]) {
int n, fdp, fdc;
char key[]="password";
unsigned char buf[LINELEN];
if (argc < 3) {fprintf(stderr,"USO %s <fileP> <fileC>\n",argv[0]);exit(0);}
if ((fdp = open (argv[1], O_RDONLY)) == -1)
merror ("Open FDP");
if ((fdc = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 00744)) == -1)
merror ("Open FDC");
while ((n = read(fdp, buf, LINELEN)) > 0)
write (fdc, Encriptar(key, buf, n), n);
close (fdp);
close (fdc);
exit (0);
}
이 두 번째
//FILE DECRYPTION
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <openssl/des.h>
#include <sys/types.h>
void merror(char *msg) {
perror(msg);
exit(0);
}
char *Decriptar(char *Key, char *Msg, int size) {
static char* Res;
int n=0;
DES_cblock Key2;
DES_key_schedule schedule;
Res = (char *) malloc(size);
memcpy(Key2, Key,8);
DES_set_odd_parity(&Key2);
DES_set_key_checked(&Key2, &schedule);
DES_ecb_encrypt((unsigned char *)Msg, (unsigned char *)Res,&schedule,DES_DECRYPT);
return (Res);
}
#define LINELEN 8
int main(int argc, char *argv[]) {
int n, fdp, fdc;
char key[]="password";
unsigned char buf[LINELEN];
if (argc<3) {fprintf(stderr,"USO %s <fileC> <fileP>\n", argv[0]); exit(0);}
if ((fdc = open (argv[1], O_RDONLY)) == -1)
merror ("Open FDP");
if ((fdp = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, 00744)) == -1)
merror ("Open FDC");
while ((n = read(fdc, buf, LINELEN)) > 0)
write (fdp, Decriptar(key, buf, n), n);
close (fdp);
close (fdc);
exit (0);
}
하지만, 내가 마일 암호 텍스트를 만드는 데 사용되는 일반 텍스트와 동일하지 암호문 해독 ES에서받은 일반 텍스트입니다.
'Encriptar'에서 DES 출력을 보유하는 데 필요한 것보다 작은 버퍼를 할당합니다. 이것은 당신이 암호문의 일부를 버리고 있다는 것을 의미합니다 (버퍼 오버런은 말할 것도 없습니다). 거대한 조회 테이블을 나타내는 방법으로 ECB 모드의 암호 (한 번 입력)를 생각해보십시오. 암호 해독의 경우 암호문을 일반 텍스트를 조회하는 데 사용하는 색인으로 생각하십시오. 암호문 *을 전혀 변경하지 않으면 다른 평문을 찾아 볼 수 있으며 "비슷한"색인을 찾은 값 사이에는 예측 가능한 관계가 없습니다. – lockcmpxchg8b
또한 [블록 암호는 무엇입니까 pkcs 패딩] (https://www.google.com/search?q=block+cipher+what+is+pkgcs+padding) – jww