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 ...
随机推荐
- 前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度
前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度, 下载完整代码请访问uni-app插件市场地址: https://ext.dcloud.net.cn/plugin?i ...
- 安装VMware Workstation 16 Pro
下载 官网:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html 注:我是在新毒霸软件管 ...
- 用写代码的方式画图-试下PlantUML吧
1 序言 所谓一图胜千言,大家平日在工作中编写文档时,往往都需要画各种图来表达中心思想,比如流程图.时序图.UML 图,很多人选择使用 Axure .PrecessOn.Diagrams(darw.i ...
- JS中使用Promise.all控制所有的异步请求都完成后,在执行后续逻辑
使用场景为,在js中连续的几个异步耗时操作,后面的耗时操作需要使用第一个操作的返回结果.例如调用ajax异步接口,需要先创建完主表,然后拿到主表id在去循环创建明细表,等全部创建完成后,弹出提示来,或 ...
- 通过ssh远程执行kubectl命令报错问题
在使用Jenkins链接Kubernetes集群,如果Jenkins安装机器与Kubernetes Master节点不在同一台机器上面,需要使用ssh远程执行部署命令,如下: ssh root@10. ...
- 即构✖叮咚课堂:行业第一套AI课堂解决方案是怎么被实现的?
AI走进教育,是传统教育的一次迭代进化 在教育问题上,我们看到两类话题最容易引发公众讨论:教育公平和个性化教育,"互联网+教育"有可能解决第一类话题,"AI教育" ...
- 你的Spring应用启动很慢?不妨试试这个工具!
睡不着闲逛,在GitHub上看到一个挺实用的开源项目:Spring Startup Analyzer. 从项目名称中就大概能猜到,这是一个分析Spring应用启动过程的工具.Spring Startu ...
- Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-4_w0c665/PyQt5/
错误: 解决方式:输入一下命令 1 pip3 install --upgrade setuptools 2 python3 -m pip install --upgrade pip 输入命令: 1 p ...
- Burnside 定理
Burnside 定理 问题: 给定一个 \(n\) 个点,\(n\) 条边的环,有 \(m\) 种颜色,给每个顶点染色,问有多少种本质不同的染色方案,答案对 \(10^9+7\) 取模 注意本题的本 ...
- gpg 解密-禁用交互式密码输入
背景描述 gpg 解密默认弹出如下窗口,请用户输入密码,但在脚本自动化时遇到了问题 lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x ...