openssl加解密实战
一、概念
1、加密有两种类型
密钥加密(secret-key encryption)使用相同的密钥进行加密和解密,也叫对称加密
公钥加密(public-key encryption)使用不同的密钥进行加密和解密,也叫非对称加密
密钥加密速度更快,公钥加密更加安全,因为它解决了安全共享密钥的问题
2、公钥加密使用两组密钥,称为密钥对
一个是公钥,用于加密,可以与你想要秘密通信的任何人自由共享、交换;
一个是私钥,用于解密,应该是一个秘密,永远不会共享。
如你想与别人交流敏感文件,可将你的公钥发送给他,他使用公钥加密文件,然后将加密后的文件其发送给你。你解密发件人的加密文件的唯一方法,是使用私钥进行解密。
二、公钥加密/非对称加密
1、生成私钥
#定义私钥文件的名字
export PRIVATE_KEY=liking_private
#定义公钥文件的名字
export PUBLIC_KEY=liking_public
#生成私钥
openssl genrsa -aes128 -out ${PRIVATE_KEY}.pem 1024
2、查看私钥
openssl rsa -in ${PRIVATE_KEY}.pem -noout -text
hexdump -C ./${PRIVATE_KEY}.pem
3、提取公钥
openssl rsa -in ${PRIVATE_KEY}.pem -pubout > ${PUBLIC_KEY}.pem
4、查看公钥
openssl rsa -in ${PUBLIC_KEY}.pem -pubin -text -noout
hexdump -C ./${PUBLIC_KEY}.pem
5、使用公钥加密文件
以下脚本可以对多个文件进行加密:
vim liking_enc.sh
#!/bin/bash
export PRIVATE_KEY=liking_private
export PUBLIC_KEY=liking_public
export FILES="oratopjk oratopts oratopwy oratopzz sqlplusjk sqlplusts sqlpluswy sqlpluszz"
for file in ${FILES}
do
openssl rsautl -encrypt -inkey ${PUBLIC_KEY}.pem -pubin -in ${file} -out ${file}.enc
rm -rf ${file}
done
注1:-inkey指定密钥,默认是私钥,再加-pubin表示指定公钥
注2:rsautl只能对短小的文件进行操作,否则将报"data too large for key size"
hexdump -C ./${file}.enc
6、使用私钥解密文件
以下脚本可以对多个文件进行解密:
vim liking_dec.sh
#!/bin/bash
export PRIVATE_KEY=liking_private
export PUBLIC_KEY=liking_public
export FILES="oratopjk oratopts oratopwy oratopzz sqlplusjk sqlplusts sqlpluswy sqlpluszz"
for file in ${FILES}
do
openssl rsautl -decrypt -inkey ${PRIVATE_KEY}.pem -in ${file}.enc -out ${file}
rm ${file}.enc
done
chmod +x ${FILES}
三、密钥加密/对称加密
1、加密
openssl enc -e -aes-128-ecb -in ${FILE_NAME} -out ${FILE_NAME}.enc -pass pass:passw0rd -p
2、解密
openssl enc -d -aes-128-ecb -in ${FILE_NAME}.enc -out ${FILE_NAME} -pass pass:passw0rd -p
3、批量文件压缩、加解密操作
#压缩并加密一组文件如x、y,生成文件xy
tar cvfz - x y | openssl enc -e -aes-128-ecb -out xy -pass pass:passw0rd
#解压缩并解密文件xy,恢复为源文件x、y
openssl enc -d -aes-128-ecb -in xy -pass pass:passw0rd | tar xvfz -
4、批量文件压缩、加解密操作:【其他参考】
tar cvfz - x y | openssl des3 -salt -k passw0rd -out xy
openssl des3 -d -k passw0rd -salt -in xy | tar xvfz -
四、总结
以上可以看出,在工作中选择加密方式的策略如下:
1、如果追求安全、无痕,则采用非对称加密,自始至终没有明文密码痕迹,但稍显复杂,且以上方法只能加密小文件。
2、如果追求简单、实用,则采用对称加密,一个命令即可实现,但是命令行历史会暴露密码明文。
openssl加解密实战的更多相关文章
- .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- .NET Core加解密实战系列之——消息摘要与数字签名算法
目录 简介 功能依赖 消息摘要算法 MD算法 家族发展史 应用场景 代码实现 MD5 示例代码 SHA算法 应用场景 代码实现 SHA1 SHA256 示例代码 MAC算法 HMAC算法的典型应用 H ...
- .NET Core加解密实战系列之——对称加密算法
简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...
- curses-键盘编码-openssl加解密【转】
本文转载自;https://zhuanlan.zhihu.com/p/26164115 1.1 键盘编码 按键过程:当用户按下某个键时, 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan ...
- Openssl 加解密文件
使用openssl 的命令行进行文件的加密与解密过程,主要有两种方式: openssl 指定加密/解密算法加密 openssl 指定公钥/私钥文件加密 openssl 指定加密/解密算法加密 To E ...
- .NET Core加解密实战系列之——RSA非对称加密算法
目录 简介 功能依赖 生成RSA秘钥 PKCS1格式 PKCS8格式 私钥操作 PKCS1与PKCS8格式互转 PKCS1与PKCS8私钥中提取公钥 PEM操作 PEM格式密钥读取 PEM格式密钥写入 ...
- OpenSSL加解密
http://www.caole.net/diary/des.html Table of Contents OpenSSL - DES Summary DES使用的例子 另一个带注释的例子 另一段Co ...
- php OpenSSL 加解密
2018-1-6 17:10:19 星期六 $data = '123456'; $openssl_method = 'AES-256-CBC'; $openssl_iv_length = openss ...
- openssl在多平台和多语言之间进行RSA加解密注意事项
首先说一下平台和语言: 系统平台为CentOS6.3,RSA加解密时使用NOPADDING进行填充 1)使用C/C++调用系统自带的openssl 2)Android4.2模拟器,第三方openssl ...
- PHP加密解密方法,使用openssl加密解密
/** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...
随机推荐
- TVM 源码阅读PASS — VectorizeLoop
本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop这个PASS就是对标记为ForKind::kVectoriz ...
- 一文了解Go语言的匿名函数
1. 引言 无论是在Go语言还是其他编程语言中,匿名函数都扮演着重要的角色.在本文中,我们将详细介绍Go语言中匿名函数的概念和使用方法,同时也提供一些考虑因素,从而帮助在匿名函数和命名函数间做出选择. ...
- spingmvc配置AOP 之 非注解方式
spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...
- CPython, Pypy, MicroPython...还在傻傻分不清楚?
哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy.Jython.MicroPython.Brython.RustPython 等 &qu ...
- 从钢铁行业数字化管控与超自动化融合,看华为WeAutomate能力进化
文/王吉伟 钢铁行业的数字化转型,历来都是值得探讨的热点话题. 2022年,我国粗钢产量10.13亿吨,占据了全球钢铁供给市场的半壁江山. 这组数据可谓非常抢眼,但仍旧难掩诸多企业的各种经营问题. 钢 ...
- .NET 8 Preview 6发布,支持新的了Blazor呈现方案 和 VS Code .NET MAUI 扩展
2023年7月11日 .NET 8 Preview 6,.NET 团队在官方博客发布了系列文章: Announcing .NET 8 Preview 6[1] ASP.NET Core updates ...
- idea连接数据库及使用
连接数据库 idea本身足够强大,可以直接操作数据库. 1.打开idea后,点击右侧的Database,点击加号,点击Data Source,在右侧选择需要的数据库,我这里选择mysql. 2.填写完 ...
- Redis从入门到放弃(2):数据类型
在Redis中,数据以键值对的形式存储.Redis支持五种主要的数据类型,每种类型都有不同的用途和特性. 本文将介绍Redis的五种数据类型:字符串(string),哈希(hash),列表(list) ...
- 论文解读(BERT-DAAT)《Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis》
论文信息 论文标题:Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis论文作者:论文来源:2020 ACL论文地 ...
- 隐藏tkinter弹出的创库
1 import tkinter as tk 2 root = tk.Tk() 3 root.withdraw()