美文网首页
RSA加密算法

RSA加密算法

作者: 夏雨後之光 | 来源:发表于2019-05-22 15:21 被阅读0次

    RSA加解密、签名验签過程

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

    RSA加密与签名的区别

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

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

    • RSA加密解密過程(B向A发送信息的场景):
      a. A生成一對密钥(公钥和私钥),私钥A自己保留,公钥发送给B
      b. B用公钥加密需要发送给A的消息
      c. A接收到B发送的加密消息,用自己的私钥解密出原消息
      在这個過程中,衹有2次传递過程,第一次是A传递公钥给B,第二次是B传递加密消息给A,即使都被拦截也没有危险性,因为衹有A的私钥才能對加密消息进行解密,防止了消息内容泄露。

    • RSA签名验签過程(A向B回复消息)
      a. A生成一對密钥(公钥和私钥),私钥A自己保留,公钥发送给B
      b. A利用自己的私钥對消息加签,形成签名,并将加签的消息和消息本身一起发送给B
      c. B收到消息後,使用公钥进行验签,如果验签出来的内容与消息本身一致,证明消息是A回复的
      在这個過程中,衹有2次传递過程,第一次是A传递公钥给B,第二次是A传递加签消息和消息本身给B,即使都被拦截也没有危险性,因为衹有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(原始文件)

    相关文章

      网友评论

          本文标题:RSA加密算法

          本文链接:https://www.haomeiwen.com/subject/ylayzqtx.html