openssl base64命令行使用
使用方式 openssl base64 [options]
常用的options如下
-in infile 省略此选项会从stdin读取
-out outfile 当outfile为 - 时代表标准输出
-e encrypt
-d decrypt
-A 不使用分隔符分割编码结果
使用标准输入,输出到标准输出的例子
openssl base64 -A -e -out -
BIO_f_base64
#include <openssl/bio.h>
#include <openssl/evp.h>
const BIO_METHOD *BIO_f_base64(void);
描述
这个函数返回一个BIO method,它是一个过滤器。会将写入这个通过这个BIO的数据都是用base64编码,使得read通过它的数据都使用base64解码。对这个BIO使用BIO_flush函数可以将最后一段刷新出去,同时可以使用BIO_set_flags()函数来更改这个BIO默认的行为,默认会在每64个字节出插入一个换行符。
BIO_new
#include <openssl/bio.h>
BIO * BIO_new(const BIO_METHOD *type);
int BIO_up_ref(BIO *a);
int BIO_free(BIO *a);
void BIO_vfree(BIO *a);
void BIO_free_all(BIO *a);
返回一个新的BIO通过methoad type
BIO_s_file
#include <openssl/bio.h>
const BIO_METHOD *BIO_s_file(void);
BIO *BIO_new_file(const char *filename, const char *mode);// fopen
BIO *BIO_new_fp(FILE *stream, int flags);
BIO_set_fp(BIO *b, FILE *fp, int flags);
BIO_get_fp(BIO *b, FILE **fpp);
int BIO_read_filename(BIO *b, char *name)
int BIO_write_filename(BIO *b, char *name)
int BIO_append_filename(BIO *b, char *name)
int BIO_rw_filename(BIO *b, char *name)
BIO_push
#include <openssl/bio.h>
BIO *BIO_push(BIO *b, BIO *append);
BIO *BIO_pop(BIO *b);
void BIO_set_next(BIO *b, BIO *next);
BIO_push 会将append这个BIO添加到BIO b上,之后返回b。
BIO_pop 会将在链表中的b都移除掉,然后返回b在链表中的下一个bio
BIO_set_next 会将b的下一个bio替换为next指向的bio。
注意事项
但是好像push这个名字有一些错误,BIO_push并没有push,而是单纯的将两个BIO链接起来,而BIO_pop也只是单纯的将一个BIO从链中删除,并不需要被删除的BIO在链的最后。
例子
BIO_push(b64, f); // b64-f
BIO_push(md2, b64); // md2-b64-f
BIO_push(md1, md2); // md1-md2-b64-f
执行完上述代码后,整个链条为 md1-md2-b64-f 。这时候md1是链表的头,所以md1此时代表了整个链表。当向md1写数据的时候,数据会依次通过后续的节点,最后写入到f中。这个流程是自动运行的。但是当读数据的时候,数据只会反向自动流转,比如md1读数据就是在md1读,只能让从f读数据,md1才能读到经过的数据。
之后执行
BIO_pop(md2); // md1-b64-f
EVP_ENCODEINIT
EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx);
int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
const unsigned char *in, int inl);
void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
const unsigned char *in, int inl);
int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
EVP函数族提供了一个很高抽象的base64编解码接口。
标签:BIO,int,CTX,openssl,char,ENCODE,使用,EVP From: https://www.cnblogs.com/godlmkblog/p/17795774.html