zoukankan      html  css  js  c++  java
  • openssl rsa和openssl pkey

    openssl rsa和openssl pkey分别是RSA密钥的处理工具和通用非对称密钥处理工具,它们用法基本一致,所以只举例说明openssl rsa。

    它们的用法很简单,基本上就是输入和输出私钥或公钥的作用。

    openssl rsa [-in filename] [-passin arg] [-passout arg] [-out filename] [-des|-des3|-idea] [-text] [-noout] [-pubin] [-pubout] [-check]
    openssl pkey [-passin arg] [-passout arg] [-in filename] [-out filename] [-cipher] [-text] [-noout] [-pubin] [-pubout]
     
    【openssl rsa选项说明:】
    -in filename :指定密钥输入文件。默认读取的是私钥,若指定"-pubin"选项将表示读取公钥。将从该文件读取密钥,不指定时将从stdin读取。
    -out filename:指定密钥输出文件。默认输出私钥,若指定"-pubin""-pubout"选项都将输出公钥。不指定将输出到stdout。
    -pubin:指定该选项时,将显式表明从"-in filename"的filename中读取公钥,所以filename必须为公钥文件。
          :不指定该选项时,默认是从filename中读取私钥。公钥文件可以通过文件中的公钥标识符
          :"-----BEGIN PUBLIC KEY-----""-----END PUBLIC KEY-----"来辨别。
    -pubout:指定该选项时,将显示表明从"-in filename"的filename中提取公钥并输出,所以filename文件必须是私钥文件。
           :不指定该选项时,默认输出私钥。当设置了"-pubin"时,默认也设置了"-pubout"。
           :私钥文件可以通过文件中的私钥标识符"-----BEGIN PRIVATE KEY-----""-----END PRIVATE KEY-----"来辨别。
    -noout :控制不输出任何密钥信息。
    -text  :转换输入和输出的密钥文件格式为纯文本格式。
    -check :检查RSA密钥是否完整未被修改过,只能检测私钥,因为公钥来源于私钥。因此选项-"in filename"的filename文件只能是私钥文件。
    -des|-des3|-idea:加密输出文件,使得每次读取输出文件时都需要提供密码。
    -passin arg :传递解密密钥文件的密码。密码格式见openssl密码格式。
    -passout arg:指定加密输出文件的密码。
    
    【openssl pkey选项说明:】
    -cipher:等价于openssl rsa的"-des|-des3|-idea",例如"-cipher des3"

    例如:

    (1).创建一个rsa私钥文件genrsa.pri,然后从中提取rsa公钥到rsa.pub文件中。

    [root@docker-01 ~]# openssl genrsa -out genrsa.pri
    Generating RSA private key, 2048 bit long modulus
    ...........................................................................+++
    .........................................+++
    e is 65537 (0x10001)
    [root@docker-01 ~]# openssl rsa -in genrsa.pri -pubout -out rsa.pub
    writing RSA ke
    [root@docker-01 ~]# cat rsa.pub
    -----BEGIN PUBLIC KEY-----
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwdr6UztKIegSfwlSwKm/
    seJ5/tfI6FsiSkCgPdyc+B1BLdDnx8SaUw5Hkdjw6IlejdkSppw/QuURRF6zPRP+
    iTK0ctszdsArfinBZuGZWgSAyry7gQsOz89X0Vuadmoblavlb8aORvZSvr6TUStc
    LKvjPDfWbNfbyRblgpDykxHStqZJnG6535FRxOY/dntyKBnFWJip8rpNh2lyLftL
    99kF1UPKbzrfoPmdNgYi6J1C/bx/JyZF2TaXV51B4E8NRYNpk47rzVZSOQUc8Dea
    gGm9i964L8J7tziDwnNFTnaFHzNWrVDZ6OdwnakPMl1f0r1J8aaAui3wI/f4upF7
    dwIDAQAB
    -----END PUBLIC KEY-----

    (2).创建一个加密的rsa私钥文件genrsaK.pri,然后从此文件输出公钥至文件rsaK.pub。

    [root@docker-01 ~]# openssl genrsa -out genrsaK.pri -des3 -passout pass:123456
    Generating RSA private key, 2048 bit long modulus
    ....................................................................+++
    ..................................+++
    e is 65537 (0x10001)
    此时将提示输入密码才能读取该私钥文件。
    [root@docker-01 ~]# openssl rsa -in genrsaK.pri -pubout -out rsaK.pub
    Enter pass phrase for genrsaK.pri:
    writing RSA key

    可以使用"-passin"传递解密的密码。

    [root@docker-01 ~]# openssl rsa -in genrsaK.pri -pubout -out rsaK.pub -passin pass:123456
    writing RSA key

    (3).移除私钥文件或公钥文件的密码。只需直接输出到新文件即可。以已加密的私钥文件genrsaK.pri为例。

    [root@docker-01 ~]# openssl rsa -in genrsaK.pri -out genrsaNK.pri

    (4).check检测私钥文件的一致性,查看私钥文件被修改过。

    [root@docker-01 ~]# openssl rsa -in genrsaK.pri -check
    Enter pass phrase for genrsaK.pri:
    RSA key ok
    writing RSA key
    -----BEGIN RSA PRIVATE KEY-----
    MIIEowIBAAKCAQEAr6FlnxSf4LR3KTdMd25dyTF3kCFZlvyEsAoam4jggrQW+kTs
    eBCWYpcUZLCAsqDqoK/RuEETtA1d0fhFISp1Ijsnxkq2OEID4ZiIpMVPqc4MqPDs
    3XYrW6A0T3bNpcFbh4BJxzdQaxUwvGRl+QllFR/SLc579x8fPw9iTkvqzkCmx6Rb
    Dw0m/K1LbpyktluoUWCNcK4UdyY6m3RnvHsEJQT3lxySbzrfmyj8IviOOy1NKapY
    YPfHar5O5k8Vbo6KC/T1QwgT9WmRP+WZ+olIIoSsgz7PT03Y28HaZhBOjc+Zpcid
    oNcdiQFvL5q0SCyvWmd0Lx05EpETjgwd3kgtUwIDAQABAoIBABc0eOvK2tDipzff
    4Y+KGoQhsA1wCplDZfiobRmNvTQnvT1169R1RJlkIsKm+2oejsGKWWhB2OuaNIIw
    jlmydWV/cWLmrirCtiaRc8RpeXwTCGMt6e3c1h+2DBNPvB4hbQl7LsROj6aGVzkc
    /sgnsJ5Y5Pk+ZeyhxQwc6T01FKIJerCbcrGXi21oFs12sakuViEqNlgJoWzGWVq9
    vTc+0l85HQck6Ar9ESWsv6WDHYxDYxmb0O8wWbSowrlLG0q6TDUxg4qjv+PQRz41
    IoPgZYiX54D62IKYLmgUaNcvCDj1++2lVnammVB8zqd0Wb+cJ/rpTqEQ/7a4rZ85
    aqzlyGECgYEA2rRqZn/2gGUh8LaJCbifQA1VOcAfosLvLfkJUPUusIhKn9IuGEqp
    qmHwhQgcN6IBQIlRV9d4VbMyc6Ti6aM7tGYAhMisFAJa+152sDlGmVPtb5SNHBLa
    jI95QHmIUMBJsFJ8X0+akJ49l6cdcIuBTCLzp/5IZNuagweMS2VFLyMCgYEAzZSR
    R8CpSmkzipFcoFiWji6wQLs64YFe3ns+EDcy+LMfn7E+U1tvlsPLAe7B4EySc03s
    iwSB/WjU3qdlWpmUFeg/N1M1DCwrvAi+Nq6E5TxZ6wq2CBpmrIXpFJHrYCodBPqv
    T6wOozxcGHMGd80rWvdRdQXxsMZmKSud1U02hBECgYEAphhWpjmQj7o+qH04XfWk
    nBSEITPT0tyQoS188csDBna7ld0dvL0XVZrD+4RJScbzhHvFFx1A+nT5X/Jdkmqx
    sTO2OSHd7eRMDJOVOAiHoXKn5BHBiQyYhh+ASoMCD7G5RPugERJ3pFVJGZ+FMDAC
    pjv1KCRp/o75LYHR/oCOplkCgYAL6FMR6OLlYHqPyCOpVfhCfAnRdgbPEQNBt7m8
    jrXxGc73HPkTMvSfsu+LSR0JtOW2sAjHdJdi6jOKQf/o44RkUHN47OThs51E4uzB
    lhI0hO5gYtpwVbckvwzlGB6eD1Jm+240Gy8t3U0oTWFOhx+/wRuCv7lkF9nLAK+/
    rx09QQKBgD6IM4TYPFQicDtFU059xdF+LIcJ7iWc8yJSsvxZpOh8/5ddS6dG3kbZ
    yZDIrpCsS02guwU/1z+zMnuWCzfFc1q+uRbX2BRzmglS/auPFRe66CtkNKcRITsH
    p7EH02doNVjDN44Um5VNQ3TZ1jicHHJCxqlA2DeAh73uDQ2XApmA
    -----END RSA PRIVATE KEY-----

    现在随便修改下私钥文件,再检测。

    [root@docker-01 ~]# openssl rsa -in genrsaK.pri -check
    Enter pass phrase for genrsaK.pri:
  • 相关阅读:
    前台Json格式中时间的格式转换
    存储过程
    自定义注解
    递归(累加)
    java操作符
    Markdown语法参考
    for表达式的循环执行顺序
    java形参与作用域
    java引用类型数组的创建方式
    学习总结之Log4NET
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12398519.html
Copyright © 2011-2022 走看看