向openssl中添加一个最简单的算法

文章目录

    • 一、尝试在sha.c中添加新的函数
    • 二、添加自定义算法
    • 2.1 添加对应文件
    • 2.2 相关配置
    • 2.3 编译运行

一、尝试在sha.c中添加新的函数

在尝试添加新算法前,我先尝试在原有的旧算法中添加一个新函数,看是否能被编译并生成对应的动态链接库。

关于openssl的编译过程可以参考我之前的文章:Ubuntu中安装OpenSSL

首先我们下载openssl1.1.j(注意这里使用了1.1.x的版本)

之后在crypto/sha/sha256.c中,添加下列语句

/*原有的内容*/
unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md)
{SHA256_CTX c;static unsigned char m[SHA256_DIGEST_LENGTH];if (md == NULL)md = m;SHA256_Init(&c);SHA256_Update(&c, d, n);SHA256_Final(md, &c);OPENSSL_cleanse(&c, sizeof(c));return md;
}
/*添加的内容开始*/
int test_ab(int a,int b){return a + b;
}
/*添加的内容结束*//*原有的内容*/
int SHA224_Update(SHA256_CTX *c, const void *data, size_t len)
{return SHA256_Update(c, data, len);
}

由于该文件引用了#include <openssl/sha.h>,而我们需要将我们自己写的test_ab函数添加到对应的动态链接库中,因此还需要在头文件中声明我们自己写的这个函数

//原有的函数
unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md);
void SHA256_Transform(SHA256_CTX *c, const unsigned char *data);
//新增的函数
int test_ab(int a,int b);

在添加完对应的函数之后,我们需要对整个项目进行重新编译

./config

在完成这一步之后,如果我们之间make,则会得到如下错误:test_ab does not have a number assigned,这里我参考了另一篇博客,解决了这个问题:openssl does not have a number assigned

因此,在执行完上面的命令后,我们还需要执行make update

make update

之后再执行make和make install即可

make
sudo make install

就可以生成对应的动态链接库了。

在生成对应的动态链接库后,我们可以编写一个函数调用我们刚刚添加的算法

#include <stdio.h>  
#include <openssl/sha.h>  int main() {int a = 10;int b = 21;printf("%d\n",test_ab(a,b));  return 0;
}

之后,我们对该文件进行编译并链接到对应的动态链接库(若按照下面的命令执行,应将动态链接库拷贝到main1.c所在的路径下)

gcc main1.c -L. -lssl -lcrypto -o main1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

之后执行,即可输出结果

二、添加自定义算法

在完成了上面的在已集成算法中添加新函数的功能后,我们更进一步,添加自己定义的算法。在这里,我部分参考了这个网址:How to Integrate a Symmetric Cipher

2.1 添加对应文件

首先,假设我们要定义一个新的名为spear的算法,我们首先需要在crypto目录中新建一个名为spear的目录,之后再在这个目录中新建一个spear.cbuild.info,之后填充这两个文件的内容

spear.c,在该文件中自定义了很多函数

#include <openssl/spear.h>
#include <stdio.h>int spear(){printf("%s\n","Spear execute!");return 199;
}int spear_add_ab(int a,int b){return a + b;
}int spear_sub_ab(int a,int b){return a - b;
}

build.info,定义了config时的源文件的路径

LIBS=../../libcrypto
SOURCE[../../libcrypto]=\spear.c

由于spear.c文件中添加了对应的头文件,而此时我们还没有新建该头文件,因此我们需要在include/openssl目录下新建一个头文件spear.h

int spear();
int spear_add_ab(int a,int b);
int spear_sub_ab(int a,int b);

2.2 相关配置

在完成相关函数编写后,我们需要将自定义的算法进行配置

首先改变cofig文件中的内容,再最后加上spear

for i in aes aria bf camellia cast des dh dsa ec hmac idea md2 md5 mdc2 rc2 rc4 rc5 ripemd rsa seed sha sm2 sm3 sm4 spear
doif [ ! -d $THERE/crypto/$i ]thenoptions="$options no-$i"fi
done

之后在Configure中进行如下修改,再最后加上spear

$config{sdirs} = ["objects","md2", "md4", "md5", "sha", "mdc2", "hmac", "ripemd", "whrlpool", "poly1305", "blake2", "siphash", "sm3","des", "aes", "rc2", "rc4", "rc5", "idea", "aria", "bf", "cast", "camellia", "seed", "sm4", "chacha", "modes","bn", "ec", "rsa", "dsa", "dh", "sm2", "dso", "engine","buffer", "bio", "stack", "lhash", "rand", "err","evp", "asn1", "pem", "x509", "x509v3", "conf", "txt_db", "pkcs7", "pkcs12", "comp", "ocsp", "ui","cms", "ts", "srp", "cmac", "ct", "async", "kdf", "store", "spear"];

2.3 编译运行

编译运行的步骤和上面往sha.c中添加算法的一样,唯一需要注意的就是执行完config之后一定要运行make update函数,否则不会将我们写的算法添加到动态链接库中。

在完成./configmake updatemakesudo make install之后,会生成最新的动态链接库,现在我们需要自己写一个main.c文件调用对应的函数

#include <stdio.h>  
#include <openssl/spear.h>  int main() { printf("%d\n",spear());printf("%d\n",spear_add_ab(100,76));printf("%d\n",spear_sub_ab(100,76));return 0;  
}

之后的编译步骤与上面相同,只需要把main1.c换成main.c即可,即可输出对应的结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/67044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术科普:汽车开放系统架构AUTOSAR

01.AUTOSAR简介 汽车是现代人类实现“千里江陵一日还”的交通工具&#xff0c;而计算机则是使人脱离繁杂重复脑力劳动的生产技术&#xff0c;两者的结合催生了汽车电子产业的蓬勃发展。 21世纪初&#xff0c;随着汽车电子应用需求的不断增多与硬件资源不断丰富&#xff0c;软…

Multimedia-播放器-架构2

目录 引言 问题1&#xff1a; 数据缓冲区 多线程模型 缓冲区的特点&#xff1a; 点播和直播场景中的缓冲区&#xff1a; 问题2&#xff1a; 同步方式 同步实现过程 引言 上一篇梳理了播放器的基本工作与处理流程&#xff0c;本片内容主要梳理一下其中会遇到的问题&am…

如何高性能、高效率地实现3D Web轻量化?

随着互联网和Web技术的发展&#xff0c;3D Web应用的需求越来越多。然而&#xff0c;复杂的3D模型在Web上展示 和交互通常需要大量的带宽和计算资源。 为了解决这一问题&#xff0c;HOOPS技术作为一套专业的3D图形技术开发工具包&#xff0c;发挥着关键作用。本文 将探讨HOO…

pytest---添加自定义命令行参数(pytest_addoption )

前言 在目前互联网公司中&#xff0c;都会存在多个测试环境&#xff0c;那么当我们编写的自动化想要在多套测试环境下进行运行时&#xff0c;如何使用&#xff1f;大多数人想到的可能是通过将我们自动化代码中的地址修改成不同环境&#xff0c;但是这时候就会增加一些工作量&am…

【数据库】通过实例讲清楚,Mongodb的增删查改,分组查询,聚合查询aggregate

目录 一.基础概念 二.数据库的管理 1.创建数据库 2.删除数据库 二.集合的管理 1.显示所有集合 2.创建集合 3.删除当前集合 4.向集合中插入元素 三.文档的管理 1.文档插入 2.文档的更新 3.文档的删除 4.文档查询 &#xff08;1&#xff09;查询基本语法&#xff1…

【python爬虫】14.Scrapy框架讲解

文章目录 前言Scrapy是什么Scrapy的结构Scrapy的工作原理 Scrapy的用法明确目标与分析过程代码实现——创建项目代码实现——编辑爬虫代码实现——定义数据代码实操——设置代码实操——运行 复习 前言 前两关&#xff0c;我们学习了能提升爬虫速度的进阶知识——协程&#xf…

【JAVA】多态

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

开源django+mysql+vue3前后端分离商城baykeShop使用指南

baykeShop开源商城系统 项目简介 baykeShop&#xff08;拜客商城系统&#xff09;是一款全开源Python栈商城系统&#xff0c;管理后台完全前后端分离重写以适配项目&#xff0c;前后端100%开源&#xff0c;后台前端采用开源SCUI开源库对接开发&#xff0c;美观、易用、符合当…

【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理

在过去的几年中&#xff0c;科技的发展极大地改变了我们的生活和工作方式。其中&#xff0c;三维数据可视化技术的出现&#xff0c;为我们提供了全新的理解和观察世界的方式。特别是在建筑行业&#xff0c;数字孪生智慧楼宇3D可视化系统的出现&#xff0c;让我们有机会重新定义…

面试题 ⑤

1、TCP与UDP的区别 UDPTCP是否连接无连接&#xff0c;即刻传输面向连接&#xff0c;三次握手是否可靠不可靠传输&#xff0c;网络波动拥堵也不会减缓传输可靠传输&#xff0c;使用流量控制和拥塞控制连接对象个数支持一对一&#xff0c;一对多&#xff0c;多对一和多对多交互通…

排序算法问题

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 代码如下&#xff1a; 1.插入排序(简…

【VM】保姆级VM算法平台二次开发之-环境配置

VM算法平台二次开发 1.下载Visual Studio 20222.项目的创建 C# 应用3.设置属性&#xff0c;去掉属选型32位4. 进行引用的导入工作5. 重新加载&#xff0c;查看引用6. 工具箱添加Dll的依赖。&#xff08;只需要加载一次就行&#xff09; 1.下载Visual Studio 2022 可以直接在官…

python中super()用法

super关键字的用法 一、概述二、作用三、语法四、使用示例1.通过super() 来调用父类的__init__ 构造方法&#xff1a;2.通过supper() 来调用与子类同名的父类方法2.1 单继承2.2 多继承 一、概述 super() 是python 中调用父类&#xff08;超类&#xff09;的一种方法&#xff0…

R语言+Meta分析;论文新方向

Meta分析是针对某一科研问题&#xff0c;根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法&#xff0c;对来源不同的研究成果进行收集、合并及定量统计分析的方法&#xff0c;最早出现于“循证医学”&#xff0c;现已广泛应用于农林生态&#xff0c;资源环境等方面。…

如何使用ArcGIS Earth制作地图动画视频

通常情况下&#xff0c;我们所看到的地图都是静态展示&#xff0c;对于信息的传递&#xff0c;视频比图片肯定会更加丰富&#xff0c;所以制作地图动画视频更加有利于信息的传递&#xff0c;这里我们讲解一下ArcGIS Earth 2.0如何制作地图动画视频&#xff0c;希望能对你有所帮…

3.2.0 终极预告!云原生支持新增 Spark on k8S 支持

视频贡献者 | 王维饶 视频制作者 | 聂同学 编辑整理 | Debra Chen Apache DolphinScheduler 3.2.0 版本将发布&#xff0c;为了让大家提前了解到此版本更新的主要内容&#xff0c;我们已经制作了几期视频和内容做了大致介绍&#xff0c;包括《重磅预告&#xff01;Apache Dol…

AI:04-基于机器学习的蘑菇分类

蘑菇是一类广泛分布的真菌,其中许多种类具有重要的食用和药用价值,但也存在着一些有毒蘑菇。因此,准确地区分可食用和有毒的蘑菇对于保障人们的食品安全和健康至关重要。本研究旨在基于机器学习技术开发一种蘑菇分类系统,以实现对蘑菇的自动分类和识别。通过构建合适的数据…

springboot基础(79):通过pdf模板生成文件

文章目录 前言通过pdf模板生成文件一 . 制作模板二、编辑代码实现模板生成pdf文件三、pdf在线预览和文件下载 扩展问题遇到的问题1. 更换字体为宋体常规2. 下载时中文文件名乱码问题 前言 通过pdf模板生成文件。 支持文本&#xff0c;图片&#xff0c;勾选框。 本章代码已分享…

17.Oauth2-微服务认证

1.Oauth2 OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务&#xff0c;通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源&#xff0c;或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解&#xff0c;可以想象OAuth2.0就是在用…

实现 Entity实例生命周期和vue组件生命周期融合

场景解决方案实现方案index.vue方案解决效果 场景 ceisum中Entity实例的生成和销毁&#xff0c;大部分逻辑和vue代码分离&#xff0c;导致不好阅读和维护 解决方案 ceisum 中实例 Entity 的生命周期&#xff0c;和vue的生命周期’相似’&#xff0c;把两个生命周期结合(把en…