当前位置: 首页 > news >正文

openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c

文章目录

    • openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c
    • 概述
    • 笔记
    • END

openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c

概述

使用 SHA3-512 对stdin输入做摘要, 并输出摘要值.

笔记

/*!
\file EVP_MD_stdin.c
\note openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c
使用 SHA3-512 对stdin输入做摘要, 并输出摘要值.
*//*-* Copyright 2019-2023 The OpenSSL Project Authors. All Rights Reserved.** Licensed under the Apache License 2.0 (the "License").  You may not use* this file except in compliance with the License.  You can obtain a copy* in the file LICENSE in the source distribution or at* https://www.openssl.org/source/license.html*//*-* Example of using EVP_MD_fetch and EVP_Digest* methods to calculate* a digest of static buffers* You can find SHA3 test vectors from NIST here:* https://csrc.nist.gov/CSRC/media/Projects/Cryptographic-Algorithm-Validation-Program/documents/sha3/sha-3bytetestvectors.zip* For example, contains these lines:Len = 80Msg = 1ca984dcc913344370cfMD = 6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816* use xxd convert the hex message string to binary input for EVP_MD_stdin:* echo "1ca984dcc913344370cf" | xxd -r -p | ./EVP_MD_stdin* and then verify the output matches MD above.*/#include <string.h>
#include <stdio.h>
#include <openssl/err.h>
#include <openssl/evp.h>#include "my_openSSL_lib.h"/*-* This demonstration will show how to digest data using* a BIO created to read from stdin*/int demonstrate_digest(BIO* bio_input)
{OSSL_LIB_CTX* _ossl_lib_ctx = NULL;int ret = 0;const char* _psz_option_properties = NULL;EVP_MD* _evp_md_message_digest = NULL;EVP_MD_CTX* _evp_md_ctx_digest_context = NULL;unsigned int digest_length;unsigned char* _psz_digest_value = NULL;unsigned char buffer[512];int i;_ossl_lib_ctx = OSSL_LIB_CTX_new();if (_ossl_lib_ctx == NULL) {fprintf(stderr, "OSSL_LIB_CTX_new() returned NULL\n");goto cleanup;}/** Fetch a message digest by name* The algorithm name is case insensitive.* See providers(7) for details about algorithm fetching*/_evp_md_message_digest = EVP_MD_fetch(_ossl_lib_ctx,"SHA3-512", _psz_option_properties);if (_evp_md_message_digest == NULL) {fprintf(stderr, "EVP_MD_fetch could not find SHA3-512.");ERR_print_errors_fp(stderr);OSSL_LIB_CTX_free(_ossl_lib_ctx);return 0;}/* Determine the length of the fetched digest type */digest_length = EVP_MD_get_size(_evp_md_message_digest);if (digest_length <= 0) {fprintf(stderr, "EVP_MD_get_size returned invalid size.\n");goto cleanup;}_psz_digest_value = OPENSSL_malloc(digest_length);if (_psz_digest_value == NULL) {fprintf(stderr, "No memory.\n");goto cleanup;}/** Make a message digest context to hold temporary state* during digest creation*/_evp_md_ctx_digest_context = EVP_MD_CTX_new();if (_evp_md_ctx_digest_context == NULL) {fprintf(stderr, "EVP_MD_CTX_new failed.\n");ERR_print_errors_fp(stderr);goto cleanup;}/** Initialize the message digest context to use the fetched* digest provider*/if (EVP_DigestInit(_evp_md_ctx_digest_context, _evp_md_message_digest) != 1) {fprintf(stderr, "EVP_DigestInit failed.\n");ERR_print_errors_fp(stderr);goto cleanup;}while ((i = BIO_read(bio_input, buffer, sizeof(buffer))) > 0) {if (EVP_DigestUpdate(_evp_md_ctx_digest_context, buffer, i) != 1) {fprintf(stderr, "EVP_DigestUpdate() failed.\n");goto cleanup;}break; /*! 只处理一次用户输入就拉到了, 实际应用中可以多次调用EVP_DigestUpdate  */}if (EVP_DigestFinal(_evp_md_ctx_digest_context, _psz_digest_value, &digest_length) != 1) {fprintf(stderr, "EVP_DigestFinal() failed.\n");goto cleanup;}ret = 1;for (i = 0; i < (int)digest_length; i++) {fprintf(stdout, "%02x", _psz_digest_value[i]);}fprintf(stdout, "\n");cleanup:if (ret != 1)ERR_print_errors_fp(stderr);/* OpenSSL free functions will ignore NULL arguments */EVP_MD_CTX_free(_evp_md_ctx_digest_context);OPENSSL_free(_psz_digest_value);EVP_MD_free(_evp_md_message_digest);OSSL_LIB_CTX_free(_ossl_lib_ctx);return ret;
}int main(void)
{int ret = EXIT_FAILURE;BIO* input = BIO_new_fd(fileno(stdin), 1);if (input != NULL) {ret = (demonstrate_digest(input) ? EXIT_SUCCESS : EXIT_FAILURE);BIO_free(input);}if (ret != EXIT_SUCCESS)ERR_print_errors_fp(stderr);return ret;
}

END

相关文章:

openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c

文章目录 openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c概述笔记END openssl3.2 - 官方demo学习 - digest - EVP_MD_stdin.c 概述 使用 SHA3-512 对stdin输入做摘要, 并输出摘要值. 笔记 /*! \file EVP_MD_stdin.c \note openssl3.2 - 官方demo学习 - digest - EVP…...

浅谈 Raft 分布式一致性协议|图解 Raft

前言 大家好&#xff0c;这里是白泽。本文是一年多前参加字节训练营针对 Raft 自我整理的笔记。 本篇文章将模拟一个KV数据读写服务&#xff0c;从提供单一节点读写服务&#xff0c;到结合分布式一致性协议&#xff08;Raft&#xff09;后&#xff0c;逐步扩展为一个分布式的…...

4_【Linux版】重装数据库问题处理记录

1、卸载已安装的oracle数据库。 2、知识点补充&#xff1a; 3、调整/dev/shm/的大小 【linux下修改/dev/shm tmpfs文件系统大小 - saratearing - 博客园 (cnblogs.com)】 mount -o remount,size100g /dev/shm 4、重装oracle后没有orainstRoot.sh 【重装oracle后没有orains…...

隧道应用2-netsh端口转发监听Meterpreter

流程介绍&#xff1a; 跳板机 A 和目标靶机 B 是可以互相访问到的&#xff0c;在服务器 A 上可以通过配置 netsh 端口映射访问 B 服务器。如果要拿 B 服务器的权限通常是生成正向后门&#xff0c;使用 kali 的 msf 正向连接B服务器&#xff0c;进而得到 Meterpreter&#xff0c…...

《Spring》--使用application.yml特性提供多环境开发解决方案/开发/测试/线上--方案1

阿丹有话说&#xff1a; 有不少同志有疑问说我正常开发的时候&#xff0c;需要自己搭建项目的时候。总是出现配置文件环境切换出现问题。多环境系列会出两个文章解决给搭建重点解决一下这个问题。给与两种解决的方案。正确让大家只需要按照步骤操作就可以完成。 原理&#xf…...

统计项目5000+,出具报表5分钟......捷顺科技数据中台怎么做?

捷顺创立于1992年&#xff0c;以智慧车行、人行出入口软硬件产品为依托&#xff0c;致力于智慧停车生态建设和运营&#xff0c;是出入口智能管理和智慧生态环境建设的开创者和引领者。 历经近三十年的发展&#xff0c;已经成为国内智慧停车领域的领军企业。公司集研、产、销一…...

力扣(105. 从前序与中序遍历序列构造二叉树,106. 从中序与后序遍历序列构造二叉树)

题目1链接 题目1&#xff1a; 思路&#xff1a;使用前序确定根&#xff0c;使用中序分左右子树&#xff0c;分治法。 难点&#xff1a;如何控制递归确定左右子树。 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* T…...

网络安全技术新手入门:在docker上安装dvwa靶场

前言 准备工作&#xff1a;1.已经安装好kali linux 步骤总览&#xff1a;1.安装好docker 2.拖取镜像&#xff0c;安装dvwa 一、安装docker 输入命令&#xff1a;sudo su 输入命令&#xff1a;curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key …...

Docker 介绍 及 支持的操作系统

Docker组成&#xff1a; Docker主机(Host)&#xff1a; 一个物理机或虚拟机, 用于运行Docker服务进程和容器, 也成为宿主机, node节点。 Docker服务器端(Server)&#xff1a; Docker守护进程, 运行Docker容器。 Docker客户端(Client)&#xff1a; 客户端使用docker命令或其他工…...

大模型实战营Day5 LMDeploy大模型量化部署实践

模型部署 定义 产品形态 计算设备 大模型特点 内存开销大 动态shape 结构简单 部署挑战 设备存储 推理速度 服务质量 部署方案&#xff1a;技术点 &#xff08;模型并行 transformer计算和访存优化 低比特量化 Continuous Batch Page Attention&#xff09;方案&#xff08;…...

py连接sqlserver数据库报错问题处理。20009

报错 pymssql模块连接sqlserver出现如下错误&#xff1a; pymssql._pymssql.OperationalError) (20009, bDB-Lib error message 20009, severity 9:\nUnable to connect: Adaptive Server is unavailable or does not exist (passwordlocalhost)\n) 解决办法&#xff1a; 打…...

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…...

SQL语句详解二-DDL(数据定义语言)

文章目录 操作数据库创建&#xff1a;Create查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete使用数据库 操作表常见的几种数据类型创建&#xff1a;Create复制表 查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete 操作数据库 创…...

web前端算法简介之链表

链表 链表 VS 数组链表类型链表基本操作 创建链表&#xff1a;插入操作&#xff1a;删除操作&#xff1a;查找操作&#xff1a;显示/打印链表&#xff1a;反转链表&#xff1a;合并两个有序链表&#xff1a;链表基本操作示例 JavaScript中&#xff0c;instanceof环形链表 判断…...

C++函数对象

任何定义了函数调用操作符的对象都是函数对象。C 支持创建、操作新的函数对象&#xff0c;同时也提供了许多内置的函数对象。 函数包装器 std::function 提供存储任意类型函数对象的支持。 function (C11) 包装具有指定函数调用签名的任意类型的可调用对象 (类模板) bad_funct…...

插件化简单介绍

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业变现、人工智能等&#xff0c;希望大家多多支持。 未经允许不得转载 目录 一、导读二、概览三、常见的插件化方案…...

[Beego]1.Beego简介以及beego环境搭建,bee脚手架的使用,创建,运行项目

一.Beego介绍 Beego是一个开源的基于Golang的MVC框架&#xff0c;主要用于Golang Web开发,Beego可以用来快速开发API、Web、后端服务等各种应用。 Golang 的Web开发框架有很多,从 github star 数量来看Gin>Beego>lris>Echo>Revel>Buffalo 目前国内用的比较多的就…...

Tomcat 静态资源访问与项目根路径设置(AI问答)

一个静态文件&#xff0c;放在Tomcat中&#xff0c;希望能够通过网络访问&#xff0c;应该放在哪里&#xff1f; 在Apache Tomcat中&#xff0c;如果想要部署静态文件&#xff08;例如HTML、CSS、JavaScript、图片等&#xff09;并能通过网络访问&#xff0c;通常需要将这些文…...

Docker实战09|使用AUFS包装busybox

前几篇文章中&#xff0c;重点讲解了如何实现构建容器&#xff0c;需要回顾的小伙伴可以看以下文章&#xff1a; 《Docker实战06&#xff5c;深入剖析Docker Run命令》《Docker实战07&#xff5c;Docker增加容器资源限制》《Docker实战08&#xff5c;Docker管道及环境变量识别…...

什么是uni.request()?如何使用它?

uni.request()是uni-app提供的一个用于发起网络请求的API。 使用uni.request()的步骤如下&#xff1a; 在需要发起网络请求的页面中引入uni.request()方法。 调用uni.request()方法&#xff0c;并传入相应的参数&#xff0c;包括请求地址、请求方法、请求头部和请求数据等。 …...

利用快马平台快速生成javascript交互原型:以动态待办列表为例

利用快马平台快速生成JavaScript交互原型&#xff1a;以动态待办列表为例 最近在尝试快速验证一个待办事项应用的交互设计&#xff0c;发现用传统方式从零开始写代码太耗时了。正好试用了InsCode(快马)平台&#xff0c;只需要描述功能需求&#xff0c;就能自动生成可运行的Jav…...

智鼎在线测评通关秘籍:2024最新51job题库实战解析与避坑指南

智鼎在线测评通关秘籍&#xff1a;2024最新51job题库实战解析与避坑指南 在竞争激烈的求职市场中&#xff0c;智鼎在线测评已成为众多知名企业筛选人才的第一道门槛。据统计&#xff0c;2024年使用智鼎测评系统的企业数量同比增长35%&#xff0c;而通过率却不足40%。这份指南将…...

Java: 手动实现DeepSeek R1工具调用,基于ReAct与Spring AI的实践指南

1. DeepSeek R1工具调用的现状与挑战 DeepSeek R1作为当前热门的开源大模型&#xff0c;在实际应用中经常会遇到需要调用外部工具的场景。但很多开发者在使用过程中发现&#xff0c;当前版本的DeepSeek R1并不支持原生的工具调用功能。这意味着当我们想让模型执行诸如查询天气、…...

Python实战:温度转换小工具开发(附GESP考试真题解析)

Python实战&#xff1a;温度转换小工具开发与GESP考试技巧精讲 温度转换是编程入门阶段的经典案例&#xff0c;也是GESP考试中常见的题型。本文将从零开始构建一个功能完整的温度转换工具&#xff0c;同时深入解析GESP考试中可能遇到的类似题型&#xff0c;帮助初学者掌握Pytho…...

2026最权威AI论文写作工具榜单:这些被高校和导师悄悄推荐的软件你还不知道?

AI论文写作工具正在重塑学术研究的效率与质量。依托权威检测平台、高校实测数据及广大师生的真实反馈&#xff0c;这些工具已逐步成为科研工作者不可或缺的助手。本文基于多维测评与实际应用效果&#xff0c;盘点2026年最受高校和导师推荐的AI论文写作软件&#xff0c;带你了解…...

LeRobot终极指南:用开源框架零门槛构建智能协作机械臂

LeRobot终极指南&#xff1a;用开源框架零门槛构建智能协作机械臂 【免费下载链接】lerobot &#x1f917; LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch 项目地址: https://gitcode.com/GitHub_Trending/le/lerobot 副标题&#xf…...

3个实战场景:League-Toolkit如何帮你提升英雄联盟游戏体验

3个实战场景&#xff1a;League-Toolkit如何帮你提升英雄联盟游戏体验 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在…...

基于Dify和RAG技术的AI智能客服准确率优化实战

在构建基于Dify的AI智能客服时&#xff0c;我们常常会遇到一个核心挑战&#xff1a;模型给出的回答听起来头头是道&#xff0c;但仔细一核对&#xff0c;却发现它“一本正经地胡说八道”。例如&#xff0c;在一个医疗健康咨询场景中&#xff0c;用户询问“布洛芬和头孢可以一起…...

3分钟搞定Windows音频捕获:win-capture-audio让你的录音效率翻倍

3分钟搞定Windows音频捕获&#xff1a;win-capture-audio让你的录音效率翻倍 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords applicat…...

2K2000龙芯主板以科技创新为驱动力,赋能产业高质量发展

当前&#xff0c;新一轮科技革命和产业变革深入演进&#xff0c;科技创新已成为引领产业高质量发展的核心引擎&#xff0c;更是实现高水平科技自立自强、掌握产业发展主动权的关键支撑。科技创新作为新质生产力的核心驱动力&#xff0c;早已成为引领产业高质量发展的“第一引擎…...