RSA加密算法

2019-05-22  本文已影响0人  夏雨後之光

RSA加解密、签名验签過程

RSA加密是一种非对称加密,通常使用公钥加密,私钥解密,私钥签名,公钥验签。私钥是個人保存,公钥是公开的。
所以,加密解密是指公钥加密私钥解密,签名验签是指私钥签名(其实也是加密)公钥验签(其实也是解密)。

RSA加密与签名的区别

加密是为了防止信息被泄露,签名是为了信息被篡改。

假设A、B需要通过RSA加密通信,A拥有私钥,B拥有公钥

openssl 命令使用

对称加密相关

  1. base64编码
    echo string | openssl enc -base64
    echo string | openssl base64

使用-out指定输出文件,否则输出到控制台
openssl enc -base64 -in input_file
openssl base64 -in input_file

使用openssl生成密钥、签名证书

  1. 生成RSA密钥
    a. 生成私钥文件
    openssl genrsa -out pem_file(密钥文件) bit_count(位数,如1024)
    b. 查看RSA私钥参数
    openssl rsa -in pem_file(私钥文件) -text -noout
    c. 根据RSA私钥文件生成公钥文件
    openssl rsa -in private_pem_file(私钥文件) -pubout -out public_pem_file(公钥文件)

  2. 加密密钥文件(使用DES、DES3算法)
    openssl rsa -in pem_file(密钥文件) -des3 -out encrypt_pem_file(加密的密钥文件)

  3. 加解密,实际上是用公钥部分加密私钥解密
    openssl rsautl -encrypt -in plain_file -inkey pem_file -out out_file
    openssl rsautl -decrypt -in encrypt_file -inkey pem_file -out out_file
    如果指定为公钥文件,补上 -pubin 选项

  1. 签名与验签,实际上是使用私钥加密,公钥解密
    openssl rsautl -sign -in plain_file -inkey pem_file -out out_file
    openssl rsautl -veriry -in signed_file -inkey pem_file -out out_file
    如果指定为公钥文件,补上 -pubin 选项

  2. 转换密钥格式
    a. pem格式转成der格式,使用-outform指定der格式
    openssl rsa -in pem_file -outform der -out der_file
    b. der格式转成pem格式,使用-outform指定pem格式
    openssl rsa -in der_file -inform der <-outform pem> -out pem_file

openssl摘要和签名验证

  1. 信息摘要和数字签名概述
    信息摘要 是 對数据进行处理得到一段固定长度的结果,其有如下特点:
    a. 输出长度固定,即输出长度与输入长度無关
    b. 不可逆,即由输出数据理论上不能找推导出输入数据
    c. 對输入数据敏感,当输入数据变化极小時,输出数据也會发生明显的变化
    d. 防碰撞,即不同的输入数据得到相同的输出数据的可能性极低
    由于信息摘要有上述特点,一般保证数据的完整性,对一個大文件進行摘要运算,得到其摘要值。通过网络或其它渠传输後通過验证其摘要值,确定大文件本身有没有发生变化。

数字签名 是 分成两步,首先對原始文件進行摘要运算,得到摘要值,然後使用私钥對摘要值进行加密。

  1. openssl 做摘要计算
    openssl dgst -sha1(或者使用其它摘要算法) in_file

  2. openssl 使用RSA密钥進行签名验证操作
    a. 签名
    openssl dgst -sign rsa_private_pem_file -sha256(或者使用其它摘要算法) -out out_file in_file
    b. 使用私钥验签
    openssl dgst -prverify rsa_private_pem_file -sha256(或者使用其它摘要算法) -signature signed_file(签名文件) in_file(原始文件)
    c. 使用公钥验签
    openssl dgst -verify rsa_public_pem_file -sha256(或者使用其它摘要算法) -signature signed_file(签名文件) in_file(原始文件)

上一篇下一篇

猜你喜欢

热点阅读