首页 > 其他分享 >openssl使用

openssl使用

时间:2023-10-29 13:12:14浏览次数:30  
标签:BIO int CTX openssl char ENCODE 使用 EVP

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

相关文章

  • 【Elasticsearch】es脚本编程使用详解
    目录一、es脚本语言介绍1.1什么是es脚本1.2es脚本支持的语言1.3es脚本语言特点1.4es脚本使用场景二、环境准备2.1docker搭建es过程2.1.1拉取es镜像2.1.2启动容器2.1.3配置es参数2.1.4重启es容器并访问2.2docker搭建kibana过程2.2.1拉取kibana镜像2.2.2启动kibana容器2.......
  • 每日随笔——使用sbt对Scala独立应用程序进行编译打包
    使用sbt对Scala独立应用程序进行编译打包1.安装sbt使用Scala语言编写的Spark程序,需要使用sbt进行编译打包。Spark中没有自带sbt,需要单独安装。可以在网盘下载sbt安装文件sbt-1.9.0.tgz。网盘地址:https://pan.baidu.com/s/181shkgg-i0WEytQMqeeqxA(提取码:9ekc)sudomkdir/ex......
  • 工具使用
    1.go下载Go压缩包在写这篇文章的时候,Go的最新版为1.14.2。在我们下载安装包时,请浏览Go官方下载页面,并且检查一下是否有新的版本可用。以root或者其他sudo用户身份运行下面的命令,下载并且解压Go二进制文件到/usr/local目录:wget-chttps://dl.google.com/go/go1......
  • 20.1 OpenSSL 字符BASE64压缩算法
    OpenSSL是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持SSL/TLS、SSH、S/MIME、PKCS等常见的加密协议和标准。OpenSSL的功能非常强大,可以用于构建安全的网络通......
  • 21.10 Python 使用CRC32校验文件
    CRC文件校验是一种用于验证文件完整性的方法,通过计算文件的CRC值并与预先计算的CRC校验值进行比较,来判断文件是否发生变化,此类功能可以用于验证一个目录中是否有文件发生变化,如果发生变化则我们可以将变化打印输出,该功能可用于实现对特定目录的验证。首先实现文件与目录的遍历功能......
  • 20.2 OpenSSL 非对称RSA加解密算法
    RSA算法是一种非对称加密算法,由三位数学家Rivest、Shamir和Adleman共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。RSA算法是一种常用的非对称加密算法,与对称加密算法不同,RSA算法使用一对非对......
  • szfpga 详细:高云1N1开发板高云gowin软件使用教程
     1.概述  国产FPGA是最近几年起来的产品,具有性价比高特点。高云FPGA,大多用在LED,电机控制,PLC设备上。 高云1N1开发板采用GW1N-LV1QN48C6/I5FPGA器件。具有低功耗,瞬时启动,高安全性,低成本,方便扩展等特点。价格便宜,易扩张,帮助用户快速进入国产FPGA学习。开发板集成多......
  • sql报错注入(使用方式与适用版本)
    exp()报错注入版本要求:5.5<mysql版本<5.6payloadand(exp(~(select*from(操作代码)a)))列子:SELECT*FROMdbWHEREdb='test'and(exp(~(select*from(SELECTVERSION())a)))GeometryCollection()报错注入版本要求:5.5<mysql版本<5.6payload:andgeometry......
  • 在Windows下,可以使用以下步骤来捕获程序崩溃的堆栈信息
    在Windows下,Qt程序崩溃时,可以通过以下步骤捕获堆栈信息:定义一个全局的异常处理函数,在该函数中获取并保存堆栈信息。可以使用WindowsAPI函数SetUnhandledExceptionFilter来注册这个函数。LONGWINAPIUnhandledExceptionFilter(struct_EXCEPTION_POINTERS*ExceptionInfo){//在这......
  • 20.2 OpenSSL 非对称RSA加解密算法
    RSA算法是一种非对称加密算法,由三位数学家Rivest、Shamir和Adleman共同发明,以他们三人的名字首字母命名。RSA算法的安全性基于大数分解问题,即对于一个非常大的合数,将其分解为两个质数的乘积是非常困难的。RSA算法是一种常用的非对称加密算法,与对称加密算法不同,RSA算法使用一对非......