Я могу определить следующие (потенциальные) проблемы.
Я могу без проблем запускать программу на моем Linux Mint
Я думаю, что этопросто счастливое совпадение, что вы не видите проблем.
const unsigned char *message= (const unsigned char*) decryptedtext;
Если decryptedtext
является просто указателем, то дальнейший доступ к нему с помощью message
вполнеплохая идеяОбычно для доступа к ней должна быть выделена память.
size_t mlen=x;
В идеале mlen
должно быть связано с длиной message
.Если mlen
больше реальной длины message
, у вас возникли проблемы (переполнение буфера, повреждение памяти ...).
unsigned int dlen;
Как убедиться, что dlen
не больше количества записей, доступных в digest
?
printf("%x ",digest[i]);
Почему вы хотите printf
строку (digest
) в виде шестнадцатеричного числа?
---------------------
if(decryptedtext[0]==0x25 && //%
decryptedtext[1]==0x50 && //P
decryptedtext[2]==0x44 && //D
decryptedtext[3]==0x46) //F
{ printf("%s",decryptedtext);
break;
}
Это безобразно.decryptedtext
не является строкой с нулевым символом в конце, поэтому printf()
не будет печатать только 4 символа.
int x;
f = fopen("test.pdf", "w+b");
if(f == NULL) {
printf("Datei konnte nicht geoeffnet werden.\n");
}else {
while(x<decryptedtext_len) {
putc(decryptedtext[x],f);
x++;
}
x
не инициализируется перед использованием.
unsigned char hasharrayone[20];
unsigned char hasharraytwo[20];
unsigned char hasharraythree[20];
Вы могли бы использовать:
unsigned char hasharray[3][20];
int xc;
file = fopen("sxxxxx-dest-cipher.bin", "w+b");
if(file == NULL) {
printf("Datei konnte nicht geoeffnet werden.\n");
}else {
while(xc<cpl) {
putc(cfbciphertext[xc],file);
xc++;
}
xc
не инициализировано.