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

news2024/9/23 7:31:02

文章目录

    • 一、尝试在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
do
  if [ ! -d $THERE/crypto/$i ]
  then
    options="$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.coloradmin.cn/o/958972.html

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

相关文章

unity 跨屏显示

1.代码 /*Type:设置分辨率*/ using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.Runtime.InteropServices;public class ScreenManager : MonoBehaviour {[HideInInspector]//导入设置窗口函数 [DllImport("…

nginx压缩ttf文件 mine.types的作用

最近在运维过程中&#xff0c;前端提到发现在linux上下载某ttl文件&#xff08;字体文件&#xff09;太大&#xff0c;传输过程比较慢&#xff0c;于是就想着使用nginx的gzip进行压缩&#xff0c;经过不断尝试&#xff0c;终于发现在nginx的配置目录/etc/nginx/mine.types 文件…

Windows中安装nvm进行Node版本控制与详细使用教程

1.nvm介绍 nvm英文全程也叫node.js version management&#xff0c;是一个nodejs的版本管理工具。nvm和npm都是node.js版本管理工具&#xff0c;但是为了解决node各种不同之间版本存在不兼容的问题&#xff0c;因此可以通过nvm安装和切换不同版本的node。 2.nvm下载 可在点此…

springboot网上家乡特产商城系统 微信小程序

基于特产商城小程序的设计基于现有的智能手机上运行&#xff0c;可以实现管理员服务端&#xff1b;首页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理等功能。方便用户微信端&#xff1b;首页、商品信息、商城公告、购物车、我的 等详细的了解及统计分…

JavaScript Web APIs-01学习

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

Ubuntu 22.04.2 LTS 安装python3.6后报错No module named ‘ufw‘

查明原因&#xff1a; vim /usr/sbin/ufw 初步判断是python版本的问题。 # 查看python3软链接 ll /usr/bin/python3 将python3的软链接从python3.6换成之前的3.10&#xff0c;根据自己电脑情况。 可以查看下 /usr/bin 下有什么 我这是python3.10 所以解决办法是 # 移除py…

四神兽套餐,自控专业课复习最强资料详细介绍!

⭐️所谓又专又精&#xff0c;专是指我们售后群团队上百人都是自动化研究生&#xff0c;精是指我们只做自动化这一门专业学科7年了&#xff0c;研究到极致&#xff01; 专业课即将进入强化阶段啦&#xff0c;资料选的好&#xff0c;高分少不了&#xff0c;今天学姐给大家带来的…

嵌入式操作系统服务机制

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。搜…

ssm电动车租赁网站源码和论文

ssm电动车租赁网站源码和论文107 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&a…

java 中用 ReentrantReadWriteLock 解决HashMap() 线程安全问题

在并发编程中&#xff0c;当多个线程同时操作一个 变量时&#xff0c;容易出现线程安全的问题&#xff0c;我们可以使用各种锁来解决线程安全问题&#xff0c;比如&#xff1a;ConcurrentHashMap 在底层使用了synchronized 解决 HashMap()的线程安全问题, 我们这里希望使用 Ree…

三维模型OBJ格式轻量化压缩在移动智能终端应用方面的重要性分析

三维模型OBJ格式轻量化压缩在移动智能终端应用方面的重要性分析 三维模型的OBJ格式轻量化压缩在移动智能终端应用方面具有重要性。以下是对三维模型OBJ格式轻量化压缩在移动智能终端应用方面重要性的分析&#xff1a; 1、资源受限的环境&#xff1a;移动智能终端如手机、平板等…

【校招VIP】产品分析之功能分析

考点介绍&#xff1a; 作为一个产品经理&#xff0c;从需求分析到功能实现&#xff0c;一步都不能错过&#xff0c;不断调整不断沟通&#xff0c;以期达到最好的效果。 『产品分析之功能分析』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点题目 1. 拼多多…

Python中异步编程是什么意思? - 易智编译EaseEditing

异步编程是一种编程模式&#xff0c;用于处理可能会导致程序等待的操作&#xff0c;例如网络请求、文件读写或长时间的计算任务&#xff0c;而不会阻塞整个程序的执行。 在传统的同步编程中&#xff0c;当程序执行一个耗时的操作时&#xff0c;它会等待该操作完成&#xff0c;…

[Qt开发探幽(二)]浅谈关于元对象,宏和Q_ENUM

[Qt开发探幽&#xff08;二&#xff09;]深入浅出关于元对象&#xff0c;宏和Q_ENUM [Qt开发探幽&#xff08;二&#xff09;]深入浅出关于元对象&#xff0c;宏和Q_ENUM前言一、元对象但是 二、关于Q_OBJECT等宏属性1.元对象系统2.信号与槽3.属性系统 三、关于Q_ENUMS1.将其注…

让文字会说话,启英泰伦离线语音合成(TTS)技术全面升级!

• A01&#xff0c;请用餐 • 请001号到03号窗口办理业务 • 本次列车即将到达火车南站&#xff0c;请提前准备下车 语音合成&#xff08;TTS&#xff09;技术作为人工智能领域的一项重要技术&#xff0c;已经深入大众生活&#xff0c;无孔不入。通过将文字转化为生动自然的…

伦敦银杠杆怎么用才对?

在了解伦敦银这个投资方式后&#xff0c;投资者应该明白它是怎样的高杠杆的品种&#xff0c;能够为自己带来多高的回报&#xff0c;然而杠杆的作用是双向的&#xff0c;如果使用不当&#xff0c;对投资者的损害同样也会很大。那么伦敦银的杠杆&#xff0c;到底怎么使用才对呢&a…

如何优化 SketchUp 性能并避免卡顿、崩溃?

SketchUp 是建筑师、工程师、设计师和艺术家使用的流行 3D 建模软件。然而&#xff0c;随着模型变得更加复杂&#xff0c;用户可能会遇到延迟甚至崩溃的情况。在本文档中&#xff0c;我们将提供经过验证的技术来帮助您优化 SketchUp 性能并避免这些令人烦恼的问题。 1.使用高效…

Django(7)-项目实战-发布会签到管理系统

本文使用django实现一个简单的发布会签到管理系统 登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action=&qu…

js+canvas实现绘制正方形并插入文字,实现文字居中显示。

目录 一、实现效果二、实现思路三、代码实现四、代码解析五、问题六、改进后的代码1.效果图2.思路3.代码实现 一、实现效果 二、实现思路 1.先根据传入的文本内容&#xff0c;计算出文本的宽度。 2.文本宽度左右间距&#xff0c;得到正方形的边长、画布宽度。 3.在&#xff08…

Python数据分析与展示-Numpy

numpy入门 ndarray对象的属性 import numpy as npdef sun():a np.array([1,2,3,4])b np.array([5,6,7,8])c a**2 b**3return cprint(sun())a np.array([[1, 2, 3, 4],[4, 5, 6, 7]])print(a.ndim) print(a.shape) print(a.size) print(a.dtype) print(a.itemsize) ndarra…