Linux下调用openssl找不到文件

daotian_xiao 2010-11-30 10:10:22
我/usr/local目录里面有openssl也有ssl,我以前为了远程用过sudo apt-get install ssl过。
下面这段代码我用gcc t.c -I /usr/local/openssl/include说DES_cblock等没定义,网上说得用gcc t.c -lcrypto但这样也不行,找不到openssl/des.h,我用gcc t.c -lcrypto -I /usr/local/openssl/include/说找不到-lcrypto,整了很长时间了,请前辈们指点迷津吧,憋死我了。
#include <stdio.h>,
#include <openssl/des.h>

int main(int argc,char **argv)
{
DES_cblock key;
/* DES_random_key(&key); */ /* generate a random key */
DES_string_to_key("pass", &key);

DES_key_schedule schedule;
DES_set_key_checked(&key, &schedule);

const_DES_cblock input = "hehehe";
DES_cblock output;

printf("cleartext:%s ", input);

DES_ecb_encrypt(&input, &output, &schedule, DES_ENCRYPT);
printf("Encrypted! ");

printf("ciphertext:");
int i;
for (i = 0; i < sizeof(input); i++)
printf("%02x", output[i]);
printf(" ");

DES_ecb_encrypt(&output, &input, &schedule, DES_DECRYPT);
printf("Decrypted! ");
printf("cleartext:%s ", input);

return 0;
}
...全文
1110 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
kangtianwang 2011-03-09
  • 打赏
  • 举报
回复
解决办法,用 "libssl-dev" 替换 "openssl-devel".

然后sudo apt-get install libssl-dev
yui 2010-12-01
  • 打赏
  • 举报
回复
LD_LIBRARY_PATH环境变量要有openssl的库文件路径
天亮后说晚安 2010-12-01
  • 打赏
  • 举报
回复
答案出来了就飘过了
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
谢谢帮我解决这个问题的所有弟兄们!!!
steptodream 2010-12-01
  • 打赏
  • 举报
回复
睡觉去了 困了 极限了
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
前辈!
steptodream 2010-12-01
  • 打赏
  • 举报
回复
有没有
/usr/local/openssl/lib
这个目录(也就是你安装的openssl的库文件目录)?
如果有 请做如下操作 然后再用你的编译命令编译程序
修改
/etc/ld.so.conf
追加一句(直接追加 前面不要加include)
/usr/local/openssl/lib

然后执行/sbin/ldconfig

好啦 现在再编译你的程序。
steptodream 2010-12-01
  • 打赏
  • 举报
回复
我是系统管理员
研究生有前途。
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
你太猛了大哥,纯牛人啊!你说的太对了!!!一针见血!!!你现在工作是啥?我大三了,不想日后工作后通宵,所以准备考研(上面yongxin_6是我另一个号)[Quote=引用 13 楼 steptodream 的回复:]

我已经测试了一把 证明你没有安装openssl-devel

[root@rhel6 ~]# rpm -qa | grep openssl
openssl-1.0.0-4.el6.i686 <------看 我安装了openssl
[root@rhel6 ~]# gcc test.c -lcrypto <------编译你的代码 找不到头文件 和你一样一堆错误 错误就不贴了

……
[/Quote]
yongxin_6 2010-12-01
  • 打赏
  • 举报
回复
你太猛了大哥,纯牛人啊!你说的太对了!!!一针见血!!!你现在工作是啥?我大三了,准备考研[Quote=引用 13 楼 steptodream 的回复:]

我已经测试了一把 证明你没有安装openssl-devel

[root@rhel6 ~]# rpm -qa | grep openssl
openssl-1.0.0-4.el6.i686 <------看 我安装了openssl
[root@rhel6 ~]# gcc test.c -lcrypto <------编译你的代码 找不到头文件 和你一样一堆错误 错误就不贴了

……
[/Quote]
steptodream 2010-12-01
  • 打赏
  • 举报
回复
我已经测试了一把 证明你没有安装openssl-devel

[root@rhel6 ~]# rpm -qa | grep openssl
openssl-1.0.0-4.el6.i686 <------看 我安装了openssl
[root@rhel6 ~]# gcc test.c -lcrypto <------编译你的代码 找不到头文件 和你一样一堆错误 错误就不贴了

[root@rhel6 ~]# yum -y install openssl-devel <---------安装openssl-devel
[root@rhel6 ~]# gcc test.c -lcrypto <--------------再次编译你的代码 OK了!
[root@rhel6 ~]# ./a.out
cleartext:hehehe Encrypted! ciphertext:d999dbcfc047a504 Decrypted! cleartext:hehehe [root@rhel6 ~]# <-------执行也OK了(貌似你输出没有换行)
sunlaji008 2010-12-01
  • 打赏
  • 举报
回复
--------分隔符------------------
steptodream 2010-12-01
  • 打赏
  • 举报
回复
我大概知道怎么回事了 做openssl相关的开发 需要安装openssl的开发包 也就是说你要安装openssl-devel!
des.h就属于openssl-devel包!
steptodream 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 daotian_xiao 的回复:]

引用 4 楼 steptodream 的回复:

有没有
/usr/local/openssl/lib
这个目录(也就是你安装的openssl的库文件目录)?
如果有 请做如下操作 然后再用你的编译命令编译程序
修改
/etc/ld.so.conf
追加一句(直接追加 前面不要加include)
/usr/local/openssl/lib

然后执行/sbin/ldcon……
[/Quote]
把你的/etc/ld.so.conf内容贴出来我看看?
steptodream 2010-12-01
  • 打赏
  • 举报
回复

试试我4楼说的吧!
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaopei1982 的回复:]

答案出来了就飘过了
[/Quote]哪个?
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 steptodream 的回复:]

有没有
/usr/local/openssl/lib
这个目录(也就是你安装的openssl的库文件目录)?
如果有 请做如下操作 然后再用你的编译命令编译程序
修改
/etc/ld.so.conf
追加一句(直接追加 前面不要加include)
/usr/local/openssl/lib

然后执行/sbin/ldconfig

好啦 现在再编译你的程序。
[/Quote]按照你说的做了,到了最后一步,编译还是不行,我就按照http://night616.blogbus.com/logs/30358242.html来的,麻烦你再帮我看看,先谢哈
daotian_xiao 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yui 的回复:]

LD_LIBRARY_PATH环境变量要有openssl的库文件路径
[/Quote]
怎么设置啊?我就按照这个链接里做的http://night616.blogbus.com/logs/30358242.html
freetstar 2010-12-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yui 的回复:]

LD_LIBRARY_PATH环境变量要有openssl的库文件路径
[/Quote]
路径
一 铭 2010-11-30
  • 打赏
  • 举报
回复
try -lssl
rpm -ql openssl 查看库文件位置
课程简介    随着”新基建“的推行,其中涉及到的工业互联网、物联网、人工智能、云计算、区块链,无一不是与安全相关,所有数据的存储、传输、签名认证都涉及到密码学技术,所以在这样的大环境下再结合我多年安全开发经验,设计出这门课程。    因为密码学技术在新基建中的重要性,所以使其成为底层开发人员所必备的技能。特别是现在的区块链技术是全面应用密码学,大数据技术和人工智能技术也要解决隐私安全问题。所以现在学习相关技术是非常必要的技术储备,并且可以改造现有的系统,提升其安全性。课程学习目标了解DES算法原理VS2019创建C++项目,并导入openssl库学会OpenSSL DES算法加解密接口加密文件并做PKCS7 Padding 数据填充解密数据并做数据填充解析课程特点    面向工程应用    市面上的一些密码学课程和密码学的书籍,很多都是从考证出发,讲解算法原理并不面向工程应用,而我们现在缺少的是工程应用相关的知识,本课程从工程应用出发,每种技术都主要讲解其在工程中的使用,并演示工程应用的代码。    从零实现部分算法    课程中实现了base16编解码 ,XOR对称加解密算法,PKCS7 pading数据填充算法,通过对一些简单算法的实现,从而加深对密码学的理解。    理论与实践结合    课程如果只是讲代码,同学并不能理解接口背后的原理,在项目设计中就会留下隐患,出现错误也不容易排查出问题。    如果只讲理论,比如对密码学的一些研究,对于大部分从事工程应用的同学并没有必要,而是理论与实践结合,一切为了工程实践。    代码现场打出    代码不放在ppt而是现场打出,更好的让学员理解代码编写的逻辑,老师现场敲出代码正是展示出了工程项目的思考,每个步骤为什么要这么做,考虑了哪些异常,    易学不枯燥    课程为了确保大部分人开发者都学得会,理解算法原理(才能真正理解算法特性),学会工程应用(接口调用,但不局限接口调用,理解接口背后的机制,并能解决工程中会出现的问题),阅读算法源码但不实现密码算法,,并能将密码学投入到实际工程中,如果是想学习具体的加密算法实现,请关注我后面的课程。课程用到的技术    课程主要演示基于 VS2019 C++,部分演示基于ubuntu 18.04 GCC makefile    如果没有装linux系统,对本课程的学习也没有影响    课程中的OpenSSL基于最新的3.0版本,如果是openss 1.1.1版本也支持,再低的版本不支持国密算法。 课程常见问题课程讲解用的什么平台和工具?    课程演示主要在windows,基于VS2019 ,一些项目会移植到Linux在ubuntu18.04上我不会Linux能否学习本门课程?    可以的,课程主要在Windows上,Linux部分只是移植,可以暂时跳过,熟悉了Linux再过来看我不会C/C++ 语言是否能学习本门课程?    至少要会C语言,C++特性用得不多,但做了一个封装,可以预习一些C++基础。会不会讲算法实现,会不会太难学不会?    课程偏工程应用,具体的AES,椭圆曲线、RSA等算法只通过图示讲原理,一些简单hash算法会读一些源码,并不去实现,课程中会单独实现简洁的XOR对称加密和base16算法(代码量不大易懂)。其他的应用我们都基于OpenSSL3.0的SDK调用算法。课程提供源码和PPT吗?    课程中所有讲解的源码都提供,课程的上课的ppt也提供,PPT提供pdf版,只可以用于学习,不得商用,代码可以用于商用软件项目,涉及到开源系统部分,需要遵守开源的协议,但不得用于网络教学。要观看全部内容请点击c++实战区块链核心密码学-基于opensslhttps://edu.csdn.net/course/play/29593

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧