IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> <OpenSSL3.0学习>之三 加密库提供程序 -> 正文阅读

[系统运维]<OpenSSL3.0学习>之三 加密库提供程序

📒博客首页:何与非的博客
🎉欢迎关注🔎点赞👍收藏??留言📝
?? 期待一起交流!
🙏作者水平很有限,如果发现错误,求告知,多谢!
🌺有问题可私信交流!!!

🥦OpenSSL提供程序

OpenSSL附带了一组提供程序。

这些提供程序中每个提供程序中可用的算法可能因生成时配置选项而异。openssl-list命令可用于列出当前可用的算法。

openssl-list中显示的算法名称可以用作相应获取函数的算法标识符。另请参阅下面链接的特定于提供程序的手册页,了解有关使用每个提供程序中可用算法的更多详细信息。

除了OpenSSL提供程序之外,第三方也可以实现提供程序。

🥬默认提供程序

默认提供程序作为libcrypto库的一部分内置,包含所有最常用的算法实现。如果需要(如果加载了其他提供程序并提供相同算法的实现),则可以将属性查询字符串"provider=default"用作这些实现的搜索条件。默认提供程序包括以下基本提供程序中的所有功能。

如果您根本没有加载任何提供程序,则将自动加载"默认"提供程序。如果显式加载任何提供程序,则"默认"提供程序也需要显式加载(如果需要)。

🥒基本提供程序

基本提供程序作为libcrypto库的一部分内置,包含用于对 OpenSSL 密钥进行编码和解码的算法实现。如果需要(如果加载了其他提供程序并提供相同算法的实现),则可以将属性查询字符串"provider=base"用作这些实现的搜索条件。某些编码和解码算法实现本身不是 FIPS 算法实现,而是支持来自 FIPS 提供程序的算法,并允许在"FIPS 模式"下使用。属性查询字符串"fips=yes"可用于选择此类算法。

🌶?FIPS 提供程序

FIPS 提供程序是一个可动态加载的模块,因此必须在代码中或通过 OpenSSL 配置显式加载。它包含已根据 FIPS 140-2标准验证的算法实现。如果需要(如果加载了其他提供程序并提供相同算法的实现),则可以将属性查询字符串"provider=fips"用作这些实现的搜索条件。也可以使用属性"fips=yes"选择 FIPS 提供程序中所有已批准的算法实现。FIPS 提供程序还可能包含未经批准的算法实现,可以使用属性"fips=no"选择这些实现。

🌽旧版提供程序

旧版提供程序是一个可动态加载的模块,因此必须在代码中或通过 OpenSSL 配置显式加载。它包含被认为不安全或不再常用的算法实现,例如MD2或RC4。如果需要(如果加载了其他提供程序并提供相同算法的实现),则可以将属性"provider=legacy"用作这些实现的搜索条件。

🥕空提供程序

空提供程序是作为libcrypto库的一部分内置的。它根本不包含任何算法。提取算法时,如果没有显式加载其他提供程序,则将自动加载默认提供程序。若要防止这种情况发生,可以显式加载 null 提供程序。

🧄在应用程序中使用算法

通过使用"EVP"API,加密算法可供应用程序使用。每个不同的操作(如加密、摘要、消息身份验证代码等)都有一组 EVP 函数调用,可以调用这些调用来使用它们。

其中大多数遵循一个共同的模式。首先创建一个"上下文"对象。例如,对于摘要操作,您将使用EVP_MD_CTX,对于加密/解密操作,您将使用EVP_CIPHER_CTX。然后初始化操作,以便通过"init"函数使用 - 可以选择传入一组参数(使用OSSL_PARAM类型)以配置操作的行为方式。接下来的数据通过一系列"update"调用馈送到操作中。该操作使用"final"调用完成,该调用通常会提供某种输出。最后,清理并释放上下文。

下面显示了使用 SHA256 执行此过程以消化数据的完整示例。该过程与其他操作类似,例如加密/解密,签名,消息身份验证代码等。

 #include <stdio.h>
 #include <openssl/evp.h>
 #include <openssl/bio.h>
 
 int main(void)
 {
     EVP_MD_CTX *ctx = NULL;
     EVP_MD *sha256 = NULL;
     const unsigned char msg[] = {
         0x00, 0x01, 0x02, 0x03
     };
     unsigned int len = 0;
     unsigned char *outdigest = NULL;
 
     /* Create a context for the digest operation */
     ctx = EVP_MD_CTX_new();
     if (ctx == NULL)
         goto err;
 
     /*
      * Fetch the SHA256 algorithm implementation for doing the digest. We're
      * using the "default" library context here (first NULL parameter), and
      * we're not supplying any particular search criteria for our SHA256
      * implementation (second NULL parameter). Any SHA256 implementation will
      * do.
      */
     sha256 = EVP_MD_fetch(NULL, "SHA256", NULL);
     if (sha256 == NULL)
         goto err;
 
    /* Initialise the digest operation */
    if (!EVP_DigestInit_ex(ctx, sha256, NULL))
        goto err;
 
     /*
      * Pass the message to be digested. This can be passed in over multiple
      * EVP_DigestUpdate calls if necessary
      */
     if (!EVP_DigestUpdate(ctx, msg, sizeof(msg)))
         goto err;
 
     /* Allocate the output buffer */
     outdigest = OPENSSL_malloc(EVP_MD_get_size(sha256));
     if (outdigest == NULL)
         goto err;
 
     /* Now calculate the digest itself */
     if (!EVP_DigestFinal_ex(ctx, outdigest, &len))
         goto err;
 
     /* Print out the digest result */
     BIO_dump_fp(stdout, outdigest, len);
 
  err:
     /* Clean up all the resources we allocated */
     OPENSSL_free(outdigest);
     EVP_MD_free(sha256);
     EVP_MD_CTX_free(ctx);
 }
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:59:37  更:2022-01-25 11:01:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 8:58:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码