20.1 OpenSSL 字符BASE64压缩算法

这篇具有很好参考价值的文章主要介绍了20.1 OpenSSL 字符BASE64压缩算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenSSL 是一种开源的加密库,提供了一组用于加密和解密数据、验证数字证书以及实现各种安全协议的函数和工具。它可以用于创建和管理公钥和私钥、数字证书和其他安全凭据,还支持SSL/TLSSSHS/MIMEPKCS等常见的加密协议和标准。

OpenSSL 的功能非常强大,可以用于构建安全的网络通信、加密文件和数据传输,还可以用于创建和验证数字签名、生成随机数等安全应用。它被广泛用于Web服务器、操作系统、网络应用程序和其他需要安全保护的系统中。

  • 官方地址: https://slproweb.com/products/Win32OpenSSL.html

如上所示的链接则是该库的官方网站,读者可自行下载对应版本的OpenSSL库,并运行安装程序,该库默认会被安装在根目录下,通过点击下一步即可很容易的完成安装配置。

20.1 OpenSSL 字符BASE64压缩算法

该库安装成功后我们可以打开OpenSSL-Win32根目录,在目录中bin目录是可执行文件,OpenSSL的运行需要依赖于这些动态链接库,在使用时需要自行将本目录配置到环境变量内,其次include头文件lib静态库文件,在使用时读者需要自行配置到开发项目中,如下图所示;

20.1 OpenSSL 字符BASE64压缩算法

OpenSSL库其本身就是一种加密与解密算法库,运用该库我们可以实现各类数据的加解密功能,首先我们以简单的Base64算法为例对该库进行使用。

Base64算法是一种用于将二进制数据编码为ASCII字符的算法。该算法将三个字节的二进制数据转换成四个字符的ASCII字符串,使得数据在传输时能够避免出现非法字符、特殊字符等问题,同时也可以将二进制数据转换为文本形式,方便在文本协议中传输,但读者需要注意Base64编码虽然可以作为一种简单的加密方式,但是它并不是一种真正的加密算法,因为它只是将数据转换为另一种形式,而没有对数据进行加密处理。

在OpenSSL中,使用Base64加密可以调用BIO_f_base64函数实现,该函数是一种BIO过滤器,用于将数据进行Base64编码和解码,如下代码中笔者分别封装实现了这两种加解密方法,其中base64Encode接收一个字符串并将该字符串压缩为编码字符串保存,与之相反base64Decode则用于将压缩后的字符串恢复。

#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/crypto.h>

#pragma comment(lib,"libssl.lib")
#pragma comment(lib,"libcrypto.lib")

// base64 编码
char* base64Encode(const char* buffer, int length, bool newLine)
{
    BIO* bmem = NULL;
    BIO* b64 = NULL;
    BUF_MEM* bptr;

    b64 = BIO_new(BIO_f_base64());
    if (!newLine)
    {
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
    }
    bmem = BIO_new(BIO_s_mem());
    b64 = BIO_push(b64, bmem);
    BIO_write(b64, buffer, length);
    BIO_flush(b64);
    BIO_get_mem_ptr(b64, &bptr);
    BIO_set_close(b64, BIO_NOCLOSE);

    char* buff = (char*)malloc(bptr->length + 1);
    memcpy(buff, bptr->data, bptr->length);
    buff[bptr->length] = 0;
    BIO_free_all(b64);
    return buff;
}

// base64 解码
char* base64Decode(char* input, int length, bool newLine)
{
    BIO* b64 = NULL;
    BIO* bmem = NULL;
    char* buffer = (char*)malloc(length);
    memset(buffer, 0, length);
    b64 = BIO_new(BIO_f_base64());
    if (!newLine)
    {
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
    }
    bmem = BIO_new_mem_buf(input, length);
    bmem = BIO_push(b64, bmem);
    BIO_read(bmem, buffer, length);
    BIO_free_all(bmem);

    return buffer;
}

上述代码的使用也非常简单,如下所示我们通过传入一个input字符串,并将该字符串压缩后输出,接着再把该字符串解密后输出。

int main(int argc, char* argv[])
{
  // flag == false 将编码数据压缩为一行,否则原格式输出
  bool flag = false;
  std::string input = "Hello lyshark!";

  // 输出编码内容
  char* encode = base64Encode(input.c_str(), input.length(), flag);
  std::cout << "Base64 编码后: " << encode << std::endl;

  // 输出解码内容
  char* decode = base64Decode(encode, strlen(encode), flag);
  std::cout << "Base64 解码后: " << decode << std::endl;
  
  system("pause");
  return 0;
}

运行上述代码,读者可看到如下图所示的输出效果;

20.1 OpenSSL 字符BASE64压缩算法文章来源地址https://www.toymoban.com/news/detail-711144.html

到了这里,关于20.1 OpenSSL 字符BASE64压缩算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • openssl做文件处理(base64,MD5,sha256等)

    这次使用openssl,发现openssl不仅可以用来做加密和解密,实际上也可以用来做文件的处理,比如base64转码、解码,文件md5的计算等。实现这些,即可以从命令行去做,也可以通过代码去实现。 1. 命令行操作         1. base64转码、解码                转码:         

    2024年02月11日
    浏览(43)
  • elementui图片上传转为base64字符串

    场景:后端需要将上传的图片文件作为base64字符串的方式传参给他。 html代码 js代码

    2024年02月09日
    浏览(60)
  • Base64字符串与图片的相互转换

    本篇博客记载的是一个我们在开发过程中很常用的一个小功能,就是我们在处理图片的时候做数据存放到数据库的功能, 我们存放的不再是本地路径而是一个Base64的字符串! 然后我们在取值的时候又将Base64转换为一个图片文件的做法 简单的两个步骤: Base64Util: ImageUtils: 使用

    2024年02月15日
    浏览(60)
  • base64 字符串转换为 Blob 对象

    在 JavaScript 中,可以使用以下代码将 base64 字符串转换为 Blob 对象: 其中, base64 是待转换的 base64 字符串, type 是 Blob 对象的 MIME 类型,默认值为 \\\'application/octet-stream\\\' 。该函数返回一个 Blob 对象。 可以像下面这样使用该函数: 其中, base64Str 是待转换的 base64 字符串, ima

    2024年02月15日
    浏览(44)
  • 通过String字符生成base64编码在生成图片

         * base64转图片        //对字节数组字符串进行Base64解码并生成图片      * @param base64str base64码      * @return  判断是否为base64编码 生成base64编码,处理字符串            //Base64解码 判断base63str是否为空  生成图片

    2024年02月15日
    浏览(50)
  • 将 base64 字符串转换为 Blob 对象

    在 JavaScript 中,可以使用以下代码将 base64 字符串转换为 Blob 对象: 其中, base64 是待转换的 base64 字符串, type 是 Blob 对象的 MIME 类型,默认值为 \\\'application/octet-stream\\\' 。该函数返回一个 Blob 对象。 可以像下面这样使用该函数: 其中, base64Str 是待转换的 base64 字符串, ima

    2024年02月16日
    浏览(66)
  • [译]JavaScript中Base64编码字符串的细节

    本文作者为 360 奇舞团前端开发工程师 本文为翻译 原文标题:The nuances of base64 encoding strings in JavaScript 原文作者:Matt Joseph 原文链接:https://web.dev/articles/base64-encoding   Base64编码和解码是一种常见的将二进制内容转换为适合Web的文本的形式。它通常用于data URLs,比如内嵌图片

    2024年02月05日
    浏览(52)
  • 解决因base64字符串过长,报500的问题

    提示:后端用nodejs的express,前端是vue 当上传的图片小(base64字符串长度小)时,上传成功 当上传的图片大(base64字符串长度过长)时,上传失败,接口报500,服务器也报了一大堆的错误。 如果直接把base64字符串复制到数据库发现报错,提示数据太长,很明显是因为base64字符

    2024年02月11日
    浏览(49)
  • postman获取验证码图片(base64字符串格式)

    在 Tests 里编写脚本 然后,在响应体的 Visualize 里查看

    2024年02月12日
    浏览(59)
  • Java Base64字符串与String字符串互转方法

    在使用String转Base64和Base64转String上有点小问题,特此记录。 结果: 也是跟上面差不多的思路,将Base64转为byte数组,再转为String

    2024年02月15日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包