Обработка файлов: необычная ошибка при чтении файла

#c #file #encryption #openssl #file-handling

#c #файл #шифрование #openssl #обработка файлов

Вопрос:

Вывод программы таков :

Хотя правильное содержимое

(пока только при попытке расшифровки, дающей неверный результат)

но почему эта ошибка??

 udit@udit-Dabba /opt/lampp/htdocs $ ./a.out
Error reading password from BIO
Error getting password
Salted__�Yq��v��u�amp;2�t���-�
  

Код для программы таков —

 #include <stdio.h>
#include <stdint.h>

void crypto(uint8_t *key, uint32_t keylen, uint8_t *data, uint32_t datalen);

int main () {

    uint8_t icv[10]="uditgupta";

    uint8_t ekey[14]="1234567891011";

    uint8_t *key=ekey;

    uint8_t *data=icv;

    crypto(ekey,13,icv,9);


    return 0;

    }


  void crypto(uint8_t *key, uint32_t keylen,uint8_t *data, uint32_t datalen)
  {

  int ch,i;
  uint8_t mydata[100],modata[100];
  uint8_t *p=mydata;


  FILE *fp,*fq,*fr;

  fp=fopen("key","w");
  fputs(key,fp);
  fq=fopen("file.txt","w");
  fputs(data,fq);

  memset(data,0,sizeof(data));

  system("sudo openssl enc -aes-256-cbc -salt -in file.txt
 -out file.enc -pass file:key");

 fr=fopen("file.enc","r");

 memset(mydata,0,sizeof(mydata));

 i=0;

 while( (ch=fgetc(fr)) != EOF) {
            mydata[i]=ch;
            i  ;
 }

 i=0;

 puts(p);

 }
  

Я думаю, что мне нужно изменить режим чтения / записи файла, но не уверен…Пожалуйста, объясните мне, что я делаю не так???

Комментарии:

1. Похоже, что openssl вызывает эту проблему….

2. @acme нет, он работает нормально, когда используется отдельно в другом файле … это наверняка какая-то проблема с режимом чтения, как я понял.

3. @acme если вам кажется, что это проблема openssl, пожалуйста, предложите мне что-нибудь… я новичок в этом openssl.

4. Попробуйте либо очистить, либо закрыть и перед вызовом fq fp system

5. Вы теряете память и дескрипторы файлов, не закрывая свои файлы. Обязательно вызывайте fclose каждый файл после того, как закончите с ним. Во-вторых, у вас есть потенциальное переполнение буфера: что произойдет, если file.enc содержит более 100 байт?

Ответ №1:

Попробуйте либо очистить, либо закрыть и перед вызовом . fq fp system Вероятно, проблема заключается в том, что данные, которые вы только что записали в файлы, еще не были сброшены на диск при выполнении команды openssl.

Ответ №2:

как обновить openssl

Обновитесь до последней версии платформы.

Архивы OpenSSL

Для получения дополнительной информации прочитайте, как обновить OpenSSL с помощью Putty и yum command