RSA加密

作者: Niuszeng | 来源:发表于2019-07-06 18:11 被阅读0次

    RSA加密为非对称加密实现

    • 对称加密:加密解密使用同一个算法
    • 非对称加密:加密和解密使用不同算法

    rsa加密原理

    • 应用原理:明文(公钥加密) --> 密文 --> 明文(私钥解密)


      rsa工作过程

    简单来说描述如下

    1. 服务器生成公钥+私钥,将公钥给到客户端
      2.客服端 【明文--> 公钥加密 -->密文】 ==> 【服务器】
      3.服务器 【密文--> 私钥解密 -->明文】
    • 数学原理
      关于底层的算法实现涉及到一系列的数学转换步骤,这里简单列举

    1.欧拉定理:m^Φ(n) % n ≡ 1
    2.费小马定理:m^(n-1) % n ≡ 1

    1. 由1、2经过一顿神操作:m^(e*d) % n = m
      该公式就是rsa基础,至于怎么来的感兴趣的可以去看看密码学相关书籍
      将3中的公式分解可得到欧拉加密解密算法
      rsa加密:m^e % n = c, rsa解密:c^d % n = m

    所以
    1)m^e % n = c 可以看出是公钥算法(用于加密)
    2)c^d % n = m 可以看出是秘钥算法(用于解密)
    2)中间变量 “c” 可以看出是密文
    这个过程就是rsa算法的基础

    生成rsa公钥、秘钥、证书等

    这里以MacOSX为例,描述rsa算法的使用过程
    OpenSSL是操作rsa相关算法的一个应用,在MacOSX环境下可以直接使用

    OpenSSL 常用工具,Mac自带OpenSSL,打开终端直接进行rsa相关操作
    genrsa:生成并输入rsa私钥
    rsautl:使用rsa秘钥进行加密、解密、签名和验证运算等操作
    rsa:处理rsa秘钥的格式转换等

    1. 生成rsa秘钥(数字可选:512、1024、2048,越大越难破解,但是过大导致加解密过程很慢,一搬使用1024,以目前计算的硬件性能基本不可能破解)
     openssl genrsa -out private.pem 1024
    

    2.从私钥中提取公钥

     openssl rsa -in private.pem -pubout -out public.pem
    

    3.将私钥转换成明文

     openssl rsa -in private.pem -text -out private.txt
    

    此处可以使用cat查看文本信息:cat private.txt

    4.公钥加密数据

    1)生成明文文件:
    vi message.txt
    2)查看文件内容:
    cat message.txt
    3)公钥加密:
    openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt
    4)私钥解密:
    openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt
    

    也可以通过私钥加密、公钥解密

    3)私钥加密:
    openssl rsautl -sign -in message.txt -inkey private.pem -out enc.txt
    4)公钥解密:
    openssl rsautl -verify -in enc.txt -inkey public.pem -pubin -out dec.txt
    

    5.生成证书,由于公钥私钥文件在代码中不直接使用,而是使用证书方式

    1)生成证书请求文件:
    openssl req -new -key private.pem -out rsacert.csr
    依次输入:国家名(cn)、省份名、机构名(xx.inc) ..密码,邮箱等
    2) 用该请求文件去证书颁发机构(rsa认证机构)请求证书:
    openssl x509 -req -days 3650 -in  rsacert.csr -signkey private.pem -out rsacert.crt
    该过程其实是一个认证过程,相当于让该机构“盖个章”
    
    1. 提取证书供代码使用

    通常在代码中会使用公钥文件.der 和私钥文件 .p12
    可通过以下命令直接导出

    提取公钥文件der:
    openssl x509 -outform der -in rsacert.crt -out rsacert.der
    提取私钥文件p12(可设置密码):
    openssl pkcs12 -export -out p.p12 -inkey private.pem -in rsacert.crt 
    

    相关文章

      网友评论

          本文标题:RSA加密

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