OpenSSL 加解密使用之ras

  1. 参考文章:
  2. https://www.jianshu.com/p/15b1d935a44b
  3. https://www.cnblogs.com/gordon0918/p/5363466.html
  4. 生成root CA及签发证书

1. 什么是OpenSSL

OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

2. 基本功能

openssl是一个开源程序的套件、这个套件有三个部分组成:一是libcryto,这是一个具有通用功能的加密库,里面实现了众多的加密库;二是libssl,这个是实现ssl机制的,它是用于实现TLS/SSL的功能;三是openssl,是个多功能命令行工具,它可以实现加密解密,甚至还可以当CA来用,可以让你创建证书、吊销证书

2.1、非对称加密算法概述

非对称加密算法也称公开密钥算法,其解决了对称加密算法密钥分配的问题,非对称加密算法基本特点如下:

1、加密密钥和解密密钥不同

2、密钥对中的一个密钥可以公开

3、根据公开密钥很难推算出私人密钥

根据非对称加密算法的特点,可用户数字签名、密钥交换、数据加密。但是由于非对称加密算法较对称加密算法加密速度慢很多,故最常用的用途是数字签名和密钥交换。

目前常用的非对称加密算法有RSA, DH和DSA三种,但并非都可以用于密钥交换和数字签名。而是RSA可用于数字签名和密钥交换,DH算法可用于密钥交换,而DSA算法专门用户数字签名。

openssl支持以上三种算法,并为三种算法提供了丰富的指令集,本章主要介绍RSA算法及相关指令

2.2、RSA算法相关指令及用法

RSA虽然可以数字签名、密钥交换和数据加密,但是RSA加密数据速度慢,通常不使用RSA加密数据。所以最常用的功能就是数字签名和密钥交换,抛开数字签名和密钥交换的概念,实质上就是使用公钥加密还是使用私钥加密的区别。所以我们只要记住一句话:“公钥加密,私钥签名”。

公钥加密:用途是密钥交换,用户A使用用户B的公钥将少量数据加密发送给B,B用自己的私钥解密数据

私钥签名:用途是数字签名,用户A使用自己的私钥将数据的摘要信息加密一并发送给B,B用A的公钥解密摘要信息并验证

opessl中RSA算法指令主要有三个,其他指令虽有涉及,但此处不再详述。

指令 功能
genrsa 生成并输入一个RSA私钥
rsa 处理RSA密钥的格式转换等问题
rsautl 使用RSA密钥进行加密、解密、签名和验证等运算

2.3 生成私钥 加解密

~ » openssl genrsa -out my.key -des3             

/*                                                                   
Generating RSA private key, 512 bit long modulus
...++++++++++++
.++++++++++++
e is 65537 (0x10001)
# 因为指定了des3算法,并且没指定密码,所以会要求我输入密码
Enter pass phrase for my.key:   
Verifying - Enter pass phrase for my.key:
------------------------------------------------------------
*/

~ » cat my.key          

/*                                                                        
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,21A9C0CD76DFBF27

i1h8ZmZxOZxDHigtXs0tAIWNs7THoN4t00F4xmYP7gDEU8vwWXltZisUqMJ2KHgZ
ME70Tm2XvhEAwu3OLhCaV6Url+DJ/G6sMFpnvkebrW51Ndph87ZCRdhaOrXN2WVg
+/KNRv2dMh4c98zgoJqYiN6qqdY9Sztj0DMtjn2f9k7mU8l2oN5bmlO6dy+mX2ZB
Qaupx9PV2DZH7Yd5tcKLudCa44lJ9cJscnvIyzLhDHcrGytCsTeHNeVMx9gefd0p
DzMBruiNhmXSe8a067OT5mWMi7++4WOYYWfIj2bat/pxsBNo0gOxqcuV0G1RFEDA
uX0vk1ma3+hB01p51bPCjc2HF/nvs2s/YeYgJR/E3zuxQGMvi6G0uxVY10i5xhtb
mIXi1J5RSoVcj2gMXD3GasGANNG3hdTWC+g6hfq+DczmGl8uR9lXwg==
-----END RSA PRIVATE KEY-----

*/

我们可以指定私钥长度,命令最后就是指定私钥长度,默认512bit

openssl genrsa -out my.key -des3 1024

另外我们需要用到 openssl rsa 命令,我们会用它生成公钥,先看下帮助文档

$ openssl rsa -h

/*
 -inform arg     输入文件编码格式,只有pem和der两种
 -outform arg    输出文件编码格式,只有pem和der两种
 -in arg         input file  输入文件
 -sgckey         Use IIS SGC key format
 -passin arg     如果输入文件被对称加密过,需要指定输入文件的密码
 -out arg        输出文件位置
 -passout arg    如果输出文件也需要被对称加密,需要指定输出文件的密码

 -des            对输出结果采用对称加密 des算法
 -des3           对输出结果采用对称加密 des3算法
 -seed           
 -aes128, -aes192, -aes256

 以上几个都是对称加密算法的指定,生成私钥的时候一般会用到,我们不让私钥明文保存

 -text           以明文形式输出各个参数值
 -noout          不输出密钥到任何文件
 -modulus        输出模数值
 -check          检查输入密钥的正确性和一致性
 -pubin          指定输入文件是公钥
 -pubout         指定输出文件是公钥
 -engine e       指定三方加密库或者硬件
*/

我们利用刚才生成的私钥my.key,以此生成一个公钥

~ » openssl rsa -in my.key -pubout -out my_pub.key     

/*                                                             
Enter pass phrase for my.key: # 因为私钥有密码,我们需要输入
writing RSA key
------------------------------------------------------------
*/

~ » cat my_pub.key                            

/*                                                                      
-----BEGIN PUBLIC KEY-----
MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAN4QWx/qPoOllcE8ZcR5zBzrSVFh7NXY
4SJHB8+IM3Wv2aYi7F3GlZjpt6EP3vdd4x4cJnuPFnZ5mZ5wFPQ8xD0CAwEAAQ==
-----END PUBLIC KEY-----
*/

另外:因为刚刚生成的私钥(my.key)是des3算法加密后的密文,转化为明文如下: 

openssl rsa -in my.key -out my_private.key

因为openssl genrsa 采用RSA算法,所以解密也是openssl rsa

openssl enc -d -base64 -des-ede3-cbc -in my.key -out mykey.pem
 -d 解密过程 ,默认-base64 -des-ede3-cbc算法 
下方杂乱

openssl rsa -in alexprivate.key -pubout -out alex_pub.key

openssl rsautl -decrypt -in alexprivate.key -inkey test_pub.key -out alexend.pem
openssl rasutl -encrypt -in <原始文件> -inkey -pubin < RSA 公共 密码 文件> -out <输出文件>

 openssl enc -d -des3 -passout pass:123456 -a -salt -in alexprivate.key -out alexkey.pem #对称解密密的格式
 openssl enc -base64 -d -des-ede3-cbc -pass pass:p@=p? -in alexprivate.key -out alexkey.pem
openssl genrsa -out my.key -des3

---test
加密  openssl genrsa -des3 -passout pass:123456 -out my.key 2048 
解密1: openssl enc -d -base64 -des-ede3-cbc -in alexprivate.key -out alexkey.pem
openssl rsautl -decrypt -base64 -des-ede3-cbc -in alexprivate.key -out alexkey.pem 
解密:openssl enc -base64 -des-ede3-cbc  -in alexprivate.key -out private.key
/*使用RSA密钥进行验证,实际上使用公钥进行解密*/
$ openssl rsautl -verify -in sign.txt -inkey RSA.pem -passin pass:123456 -out replain.txt

openssl rsa -in alexprivate.key -out private4.key

猜你喜欢

转载自blog.csdn.net/qq_32447321/article/details/86142710
今日推荐