向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.rhkb.cn/news/115919.html

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

相关文章

艾昆纬携手亚马逊云科技赋能生物医药企业,加速武田数字化转型

IQVIA艾昆纬是全球以及中国医疗健康服务领域的领导者&#xff0c;利用其数据及分析&#xff0c;前沿数字化技术和医疗领域的专业知识&#xff0c;智能连接医疗生态的各个环节。过去几年&#xff0c;IQVIA艾昆纬所服务的生物医药行业客户武田中国也迎来了数字化转型的高潮。 武田…

iOS开发Swift-6-深色模式,类与对象,MVC模式,弹出框,闭包-趣味问答App

1.创建趣味问答App项目 2.创建一个问题文本&#xff0c;水平居中约束。 创建蓝、红两个按钮&#xff0c;放入Stack View中&#xff0c;给StackView水平居中约束&#xff0c;下边约束&#xff0c;设置两按钮间距为20. 设置进度条view与safe View关系为equal width。设置他们的比…

VScode 调试python程序,debug状态闪断问题的解决方法

0. Few words 之前一直在VSCode中debug C和Python的程序没出过闪断的问题&#xff0c;但是最近在另一台电脑上debug&#xff0c;同样的方法&#xff0c;设置launch.json和CMakeList加debug状态等等操作&#xff0c;如我另一篇blog写的一样&#xff0c;可以点这里查看。 但是&a…

jsch网页版ssh

使用依赖 implementation com.jcraft:jsch:0.1.55Server端代码 import com.jcraft.jsch.Channel; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.TimeUnit; import o…

前端面试中Vue的有经典面试题一

1. 谈谈你对MVVM开发模式的理解 MVVM分为Model、View、ViewModel三者。 Model&#xff1a;代表数据模型&#xff0c;数据和业务逻辑都在Model层中定义&#xff1b; View&#xff1a;代表UI视图&#xff0c;负责数据的展示&#xff1b; ViewModel&#xff1a;负责监听Model中…

【【萌新的STM32学习-27--USART异步通信配置步骤】】

萌新的STM32学习-27–USART异步通信配置步骤 USART/UART 异步通信配置步骤 1.配置串口工作参数 HAL_UART_Init() 我们会在此处调用MSP中的回调函数 2.串口底层初始化 用户定义HAL_UART_MspInit() 配置GPIO NVIC CLOCK 等 3.开启串口异步接收中断 HAL_UART_Receive_IT() 4.…

题目有点太简单了,不知道怎么选了

有个公司给了下面一个题目&#xff0c;看了下太简单了&#xff0c;都怕选错了。 后来拿着程序跑了下&#xff0c;就是这个意思嘛。 结论 程序跑出来的结果就是对输入的列表进行倒序排列。 public void testGetPut() throws Exception {List<Integer> numbers List.of(…

Shell - 加固系统配置

文章目录 Shell Script其他方案 Shell Script #! /bin/bash # Function:对账户的密码的一些加固 read -p "设置密码最多可多少天不修改&#xff1a;" A read -p "设置密码修改之间最小的天数&#xff1a;" B read -p "设置密码最短的长度&#xff1a…

ElasticSearch学习4--复杂查询

1、查询分类 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如&#xff1a;match_all全文检索&#xff08;full text&#xff09;查询&#xff1a;利用分词器对用户输入内容分词&#xff0c;然后去倒排索引库中匹配。例如&#xff1a; match_query 根据单个字段…

保姆级 Keras 实现 Faster R-CNN 十一

保姆级 Keras 实现 Faster R-CNN 十一 一 RoI 区域二. 定义 RoiPoolingLyaer1. call 函数2. compute_output_shape 函数 三. 将 RoiPoolingLayer 加入模型 上一篇 文章中我们实现了 ProposalLyaer 层, 它将的功能是输出建议区域矩形. 本文要实现另一个自定义层 RoiPoolingLayer…

网络安全体系架构介绍

网络安全体系是一项复杂的系统工程&#xff0c;需要把安全组织体系、安全技术体系和安全管理体系等手段进行有机融合&#xff0c;构建一体化的整体安全屏障。针对网络安全防护&#xff0c;美国曾提出多个网络安全体系模型和架构&#xff0c;其中比较经典的包括PDRR模型、P2DR模…

git 查看当前分支最近一次提交的commit SHA

获取当前分支最近一次commit SHA &#xff08;长度为40个16进制数字的字符&#xff09;命令如下&#xff1a; git rev-parse HEAD 获取简写&#xff08;短&#xff09; commit SHA git rev-parse --short HEAD

Acwing 1233. 全球变暖 (每日一题)

如果你觉得这篇题解对你有用&#xff0c;可以点个赞或关注再走呗&#xff0c;谢谢你的关注~ 题目描述 你有一张某海域 NN 像素的照片&#xff0c;”.”表示海洋、”#”表示陆地&#xff0c;如下所示&#xff1a; … .##… .##… …##. …####. …###. … 其中”上下左右”…

时序预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元时间序列预测

时序预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元时间序列预测 目录 时序预测 | MATLAB实现TCN-BiGRU时间卷积双向门控循环单元时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-BiGRU时间卷积双向门控循环单元时间序列预测&a…

SQLAlchemy 封装的工具类,数据库pgsql(数据库连接池)

1.SQLAlchemy是什么&#xff1f; SQLAlchemy 是 Python 著名的 ORM 工具包。通过 ORM&#xff0c;开发者可以用面向对象的方式来操作数据库&#xff0c;不再需要编写 SQL 语句。 SQLAlchemy 支持多种数据库&#xff0c;除 sqlite 外&#xff0c;其它数据库需要安装第三方驱动。…

element中Notification组件(this.$notify)自定义样式

1、自定义样式效果 2、vue代码 this.notifications this.$notify({title: ,dangerouslyUseHTMLString: true,duration: obj.remindMethod3 ? 0:4500,customClass: notify-warning,offset: 50,showClose: false,message: this.$createElement("div",null,[this.$…

jvm-堆

1.堆的核心概念 一个jvm实例只存在一个堆内存&#xff0c;堆也是java内存管理核心区域 java堆区在jvm启动的时候即被创建&#xff0c;其空间大小就确定了&#xff0c;是jvm管理最大的一块内存空间&#xff1b; 堆可以处于物理上不连续的内存空间&#xff0c;但在逻辑上它应该被…

SpringCloud(十)——ElasticSearch简单了解(二)DSL查询语句及RestClient查询文档

文章目录 1. DSL查询文档1.1 DSL查询分类1.2 全文检索查询1.3 精确查询1.4 地理查询1.5 查询算分1.6 布尔查询1.7 结果排序1.8 分页查询1.9 高亮显示 2. RestClient查询文档2.1 查询全部2.2 其他查询语句2.3 排序和分页2.4 高亮显示 1. DSL查询文档 1.1 DSL查询分类 查询所有…

程序员自由创业周记#8:怎么设计

软件的样子 就像建造房子&#xff0c;工人施工需要照着图纸&#xff0c;没有图纸直接上手施工倒是也可以&#xff0c;只是房子的质量和样子都不敢恭维。程序员在一定意义上与建筑工人很像&#xff0c;只不过他们码砖&#xff0c;我们码码。软件开发之前也需要提前设计好界面&a…

春秋云镜 CVE-2018-19422

春秋云镜 CVE-2018-19422 Subrion CMS 4.2.1 存在文件上传漏洞 靶标介绍 Subrion CMS 4.2.1 存在文件上传漏洞。CVE-2021-41947同一套cms。 启动场景 漏洞利用 admin/admin登陆后台管理界面 执行SQL命令&#xff0c;获取flag select load_file(/flag); 得到flag flag{174…