一、概念

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加解密实战的更多相关文章

  1. .NET Core加解密实战系列之——使用BouncyCastle制作p12(.pfx)数字证书

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...

  2. .NET Core加解密实战系列之——消息摘要与数字签名算法

    目录 简介 功能依赖 消息摘要算法 MD算法 家族发展史 应用场景 代码实现 MD5 示例代码 SHA算法 应用场景 代码实现 SHA1 SHA256 示例代码 MAC算法 HMAC算法的典型应用 H ...

  3. .NET Core加解密实战系列之——对称加密算法

    简介 加解密现状,编写此系列文章的背景: 需要考虑系统环境兼容性问题(Linux.Windows) 语言互通问题(如C#.Java等)(加解密本质上没有语言之分,所以原则上不存在互通性问题) 网上资料 ...

  4. curses-键盘编码-openssl加解密【转】

    本文转载自;https://zhuanlan.zhihu.com/p/26164115 1.1 键盘编码 按键过程:当用户按下某个键时, 1.键盘会检测到这个动作,并通过键盘控制器把扫描码(scan ...

  5. Openssl 加解密文件

    使用openssl 的命令行进行文件的加密与解密过程,主要有两种方式: openssl 指定加密/解密算法加密 openssl 指定公钥/私钥文件加密 openssl 指定加密/解密算法加密 To E ...

  6. .NET Core加解密实战系列之——RSA非对称加密算法

    目录 简介 功能依赖 生成RSA秘钥 PKCS1格式 PKCS8格式 私钥操作 PKCS1与PKCS8格式互转 PKCS1与PKCS8私钥中提取公钥 PEM操作 PEM格式密钥读取 PEM格式密钥写入 ...

  7. OpenSSL加解密

    http://www.caole.net/diary/des.html Table of Contents OpenSSL - DES Summary DES使用的例子 另一个带注释的例子 另一段Co ...

  8. php OpenSSL 加解密

    2018-1-6 17:10:19 星期六 $data = '123456'; $openssl_method = 'AES-256-CBC'; $openssl_iv_length = openss ...

  9. openssl在多平台和多语言之间进行RSA加解密注意事项

    首先说一下平台和语言: 系统平台为CentOS6.3,RSA加解密时使用NOPADDING进行填充 1)使用C/C++调用系统自带的openssl 2)Android4.2模拟器,第三方openssl ...

  10. PHP加密解密方法,使用openssl加密解密

    /** * des 加密算法 */ function do_mencrypt($input, $key) { if (!function_exists("mcrypt_module_open ...

随机推荐

  1. TVM 源码阅读PASS — VectorizeLoop

    本文地址:https://www.cnblogs.com/wanger-sjtu/p/17501119.html VectorizeLoop这个PASS就是对标记为ForKind::kVectoriz ...

  2. 一文了解Go语言的匿名函数

    1. 引言 无论是在Go语言还是其他编程语言中,匿名函数都扮演着重要的角色.在本文中,我们将详细介绍Go语言中匿名函数的概念和使用方法,同时也提供一些考虑因素,从而帮助在匿名函数和命名函数间做出选择. ...

  3. spingmvc配置AOP 之 非注解方式

    spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...

  4. CPython, Pypy, MicroPython...还在傻傻分不清楚?

    哈喽大家好,我是咸鱼 当我们说 Python 时,通常指的是官方实现的 CPython 但还有很多比如 Pypy.Jython.MicroPython.Brython.RustPython 等 &qu ...

  5. 从钢铁行业数字化管控与超自动化融合,看华为WeAutomate能力进化

    文/王吉伟 钢铁行业的数字化转型,历来都是值得探讨的热点话题. 2022年,我国粗钢产量10.13亿吨,占据了全球钢铁供给市场的半壁江山. 这组数据可谓非常抢眼,但仍旧难掩诸多企业的各种经营问题. 钢 ...

  6. .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 ...

  7. idea连接数据库及使用

    连接数据库 idea本身足够强大,可以直接操作数据库. 1.打开idea后,点击右侧的Database,点击加号,点击Data Source,在右侧选择需要的数据库,我这里选择mysql. 2.填写完 ...

  8. Redis从入门到放弃(2):数据类型

    在Redis中,数据以键值对的形式存储.Redis支持五种主要的数据类型,每种类型都有不同的用途和特性. 本文将介绍Redis的五种数据类型:字符串(string),哈希(hash),列表(list) ...

  9. 论文解读(BERT-DAAT)《Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis》

    论文信息 论文标题:Adversarial and Domain-Aware BERT for Cross-Domain Sentiment Analysis论文作者:论文来源:2020 ACL论文地 ...

  10. 隐藏tkinter弹出的创库

    1 import tkinter as tk 2 root = tk.Tk() 3 root.withdraw()