Вообщем уперся в проблему. Для начала код:
#include <string.h>
#include <openssl/sha.h>
#include <openssl/hmac.h>
#include <openssl/evp.h>
#include <openssl/bio.h>
#include <openssl/buffer.h>
/* gcc -o test test.c -lssl */
int main(void)
{
BIO *b64, *bmem, *bio;
unsigned char *mycode1="WU9ZTyEA\n";
bio = BIO_new_file("/home/dbsh/leaf.txt", "w");
if(!bio){ exit(0); }
char *buffer = (char *)malloc(strlen(mycode1));
memset(buffer, 0, strlen(mycode1));
b64 = BIO_new(BIO_f_base64());
bmem = BIO_new_mem_buf(mycode1, strlen(mycode1));
bmem = BIO_push(b64, bmem);
BIO_read(bmem, buffer, strlen(mycode1));
BIO_printf(bio,buffer);
BIO_free_all(bmem);
free(buffer);
return 0;
}
код работает. но, если mycode1 содержит код от бинарного файла в base64, то в итоге, после расшифровки base64, в файл ничего не выводится. впринцепе, оно понятно, ибо идет реакция на код бинарника — на управляющие символы типа \0 и проч. вопрос, как сдампить бинарь в файл после расшифровки из base64?
UPD решение:
(16:03:02) Namelles One: так смотри, нада дампить по одному символу вплоть до buffer[LENGTH], то есть не полагаясь на функции, а просто вычитывая по байту из памяти. Тогда оно спокойно сдампится и за \0
(16:03:10) Namelles One: я с таким сталкивался уже)
(16:03:22) 391664: ммм… код есть?
(16:03:39) 391664: впринцепе указателем по массиву… да я понял
(16:03:41) Namelles One: ну, я разве непонятно обьяснил?)
Врядли есть код, это могло быть хз када)
(16:04:17) Namelles One: да и strlen нада делать на base64 строку, а то в расшифрованной оно на том же \0 отвалится)
(16:04:30) 391664: лана. спс, я чет не допер даж )
(16:05:25) Namelles One: да не за что)) для этого и существуют другие программеры — для советов)