首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

环境篇-OpenSSL命令行工具使用

  • 23-09-19 13:42
  • 3926
  • 5811
blog.csdn.net

本文属于《OpenSSL加密算法库使用系列教程》之一,欢迎查看其它文章。

环境篇-OpenSSL命令行工具使用

  • 一、对称加密命令
  • 二、非对称加密命令
    • 1、生成秘钥
    • 2、加密文件
    • 3、数字签名
  • 三、哈希命令

我们知道常用的加密算法分为对称、非对称、摘要这三种。

那么在OpenSSL中也有对应的命令。

一、对称加密命令

对称加密需要使用的标准命令为enc,可使用如下命令查看使用帮助:

openssl enc -help
  • 1

在这里插入图片描述

常用选项有:

-e:表示加密,可以指明一种加密算法,若不指的话将使用默认加密算法

-d:表示解密,也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

-in filename:指定要加密的文件存放路径

-out filename:指定加密后的文件存放路径

-salt:自动插入一个随机数作为文件内容加密,默认选项

-a/-base64:使用-base64位编码格式

-K:指定秘钥,16进制格式

-iv:指定初始化向量,16进制格式

-list:列出当前支持的加密算法列表(openssl enc -list)

举例:

使用aes-128-ecb算法对hello.txt加密,128位密钥为8cc72b05705d5c46f412af8cbed55aad,密文为hello.en。

openssl enc -e -aes-128-ecb -in hello.txt -out hello.en -K 8cc72b05705d5c46f412af8cbed55aad
  • 1

使用aes-128-ecb算法对hello.en解密,128位密钥为8cc72b05705d5c46f412af8cbed55aad,解密后为hello.de。

openssl enc -d -aes-128-ecb -in hello.en -out hello.de -K 8cc72b05705d5c46f412af8cbed55aad
  • 1

明文hello.txt与解密后的hello.de相等。如果秘钥不一致,解密后与明文不相等。

openssl enc命令仅适用于OpenSSL中对称加密算法,如AES、DES、Triple-DES。

二、非对称加密命令

主要是指RSA算法等相关命令,包括生成秘钥、加密、数字签名等。

1、生成秘钥

使用openssl genrsa标准命令。

查看帮助:

openssl genrsa -help
  • 1

生成私钥文件private.pem:

openssl genrsa -out private.pem
  • 1

这里-out指定生成文件。

根据私钥private.pem提取出公钥public.pem:

openssl rsa -in private.pem -out public.pem -pubout
  • 1

-in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥。现在可以将用公钥来加密文件了。

2、加密文件

使用openssl rsautl标准命令。

查看帮助:

openssl rsautl -help
  • 1

我在目录中创建一个hello的文本文件,然后利用之前的公钥进行加密,私钥进行解密。

加密文件:

openssl rsautl -encrypt -in hello.txt -inkey public.pem -pubin -out hello.en
  • 1

-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

解密文件:

openssl rsautl -decrypt -in hello.en -inkey private.pem -out hello.de
  • 1

-in指定被加密的文件,-inkey指定私钥文件,-out为解密后的文件。

至此,一次加密解密的过程告终。

3、数字签名

数字签名分为摘要和加密两部分,但是在openssl提供的指令中,并没有区分两者。需要注意的是,签名是指对明文的摘要进行加密,得到的密文就称为签名,而非对明文数据进行加密。

使用openssl dgst标准命令。

查看帮助:

openssl dgst -help
  • 1

使用dgst命令,然后利用之前的私钥进行签名,公钥进行验签。

签名:

openssl dgst -sha1 -sign private.pem -out sign.txt hello.txt
  • 1

指定sha1算法对hello.txt计算文件摘要,并用私钥对摘要签名,生成签名文件sign.txt

验签:

openssl dgst -verify public.pem -sha1 -signature sign.txt hello.txt
  • 1

指定sha1算法对hello.txt计算文件摘要,并用公钥对签名文件,进行验签。这里是使用RSA公钥验证签名(verify参数),验证成功。

另外:

大家都知道可以从私钥文件中提取公钥文件,所以验签时,也可以直接用私钥文件来验签。

使用RSA密钥验证签名(prverify参数),验证成功

openssl dgst -prverify private.pem -sha1 -signature sign.txt hello.txt
  • 1

疑问: 为什么可以从私钥导出公钥,而不能从公钥导出私钥?

从公钥导出私钥,实际上等同于RSA被破解,理论上,RSA可以被破解,但是随着key越长,其破解难度越大。

目前被破解的最长RSA密钥就是768位,因此就常见的RSA 1024位及以上,基本上是不能被破解的。也就是说公钥导出私钥是不成立的。

所以,OpenSSL中可以由私钥导出公钥,猜测应该是私钥的容器往往同时包含私钥与公钥(公钥是让所有人都会知道,那么拥有私钥的人没有道理不留存一份公钥),而公钥的容器仅包含公钥。

三、哈希命令

使用openssl dgst标准命令。

计算hello.txt文件的md5值:

openssl dgst -md5 hello.txt
  • 1



若对你有帮助,欢迎点赞、收藏、评论,你的支持就是我的最大动力!!!

同时,阿超为大家准备了丰富的学习资料,欢迎关注公众号“超哥学编程”,即可领取。

在这里插入图片描述

注:本文转载自blog.csdn.net的百里杨的文章"https://blog.csdn.net/zyhse/article/details/112029649"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top