OPENSSL中RSA私鑰檔案(PEM格式)解析
在PKCS#1 RSA演算法標準中定義RSA私鑰語法為:
RSAPrivateKey ::= SEQUENCE {
version Version,
modulus INTEGER, -- n
publicExponent INTEGER, -- e
privateExponent INTEGER, -- d
prime1 INTEGER, -- p
prime2 INTEGER, -- q
exponent1 INTEGER, -- d mod (p-1)
exponent2 INTEGER, -- d mod (q-1)
coefficient INTEGER, -- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos OPTIONAL
}
型別RSAPrivateKey 的各域具有以下意義:
• version 是版本號,為了與本文件的今後版本相容。本篇文件的這個版本號應該是0,如果使用了多素數,則版本號應該是1。
Version ::= INTEGER { two-prime(0), multi(1) }
(CONSTRAINED BY {-- version must be multi if otherPrimeInfos present --})
• modulus 是RSA合數模n。
• publicExponent 是RSA的公開冪e。
• privateExponent 是RSA的私有冪d。
• prime1 是n的素數因子p。
• prime2 i是n的素數因子q。
• exponent1 等於d mod (p − 1)。
• exponent2 等於d mod (q − 1)。
• coefficient 是CRT係數 q–1 mod p。
• otherPrimeInfos 按順序包含了其它素數r3, …, ru的資訊。如果version是0 ,它應該被忽略;而如果version是1,它應該至少包含OtherPrimeInfo的一個例項。
OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
OtherPrimeInfo ::= SEQUENCE {
prime INTEGER, -- ri
exponent INTEGER, -- di
coefficient INTEGER -- ti
}
OtherPrimeInfo的各域具有以下意義:
• prime 是n的一個素數因子ri ,其中i ≥ 3。
• exponent 是di = d mod (ri − 1)。
• coefficient 是CRT係數 ti = (r1 · r2 · … · ri–1)–1 mod ri。
公鑰語法為:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER -- e
}
型別RSAPublicKey的域具有以下意義:
• modulus 是RSA的合數模n。
• publicExponent 是RSA公開冪e。
在OpenSSL中生成RSA私鑰公鑰檔案並解析
OpenSSL中RSA私鑰檔案生成命令為:
openssl genrsa -out private_rsa.pem 1024
生成RSA公鑰命令為:
openssl rsa -in private_rsa.pem -pubout -out public_rsa.pem
生成的私鑰pem檔案內容如下:
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDnsN1F66mF6h6y/XpyN+ZU/w5AyeWBjZNIqi33/ATn4qQpw+kD
HrKyF7sQ/RNw6tibM90iM6VOA14305umPbPROJJs3JoB6Lao74SUm58aO9T+Ct7r
O52E+3r5jyDQicdRl6lIhLigNADXPD/KoNwfrRrCyw4wTHMZhSHc8eUHeQIDAQAB
AoGABVTIgqddiztL4Yp7ms02e5Yy2cLLiSOc0/s2e5JM+pj4dg2P+wZlzjtFjqqE
HAELYubam8LcduMU8+vmlPiufoK9fo47fLsX1PFCY9TDKL1dFlZgBAmJU7hR27h/
gCo4r3PMub/snq7n+skrbarZbX1J6Q1o5UYKFIrrIjNObEECQQD0DIzIdMObPUUu
W+JXg10kz/ayYn3irxZmp5ngc+b9WZfSOPehZBsLWsIb1eC7y9DZMhZfBQ/sPaO8
0tvqJMUFAkEA8wlj3B3zK20pK+Hj+vFiAlaQmqILTSfv/9jMm8tbVfXt+bHrmZdN
jruGVQDb7V2pW9HeG5PgDB3vKXeOiVfC5QJAYikKFzaf1rj2ModSqtBzjnL3Txi+
eYbjA7c19UmpBw4aOrwfHhMdrZt7p6aHFgIMps+2n9Fxbhv8194YBj1z4QJAPONW
XFg4iuGvVeoi9sSwvEs5sTP1xt/BlgSXxlRdTpztgQgdMX6hlKfQkM1FTCOSAYoD
rj8O+5ooR+hHEoulLQJBAOtaMvMWIOG7mARngpwqfJ07L41/T0ITHteiiYJfCurz
kLVCx1XA3MlN+u5gn7osUHMbah0Ze3uakSZ6za3mL5Y=
-----END RSA PRIVATE KEY-----
此時檔案為BASE64編碼,在openssl中執行以下命令,將BASE64編碼的檔案裝換成二進位制編碼:
openssl base64 -d -in private_rsa.pem -out private.pem
生成的private.pem 檔案為BASE64解碼後的檔案,此檔案是將RSA金鑰語法中的結構進行DER
編碼後的二進位制表現形式。對其進行解析,解析結果如下:
標籤頭 3082025c(4 bytes) 型別為SEQUENCE 後接 604 bytes
020100 INTEGER 長度為0 內容為:VERSION
028181 INTEGER 長度為129 bytes 內容為: n(modulus)
00e7b0dd45eba985ea1eb2fd7a7237e654ff0e40c9e5818d9348aa2df7fc04e7e2a429c3e9
031eb2b217bb10fd1370ead89b33dd2233a54e035e37d39ba63db3d138926cdc9a01e8b6a8
ef84949b9f1a3bd4fe0adeeb3b9d84fb7af98f20d089c75197a94884b8a03400d73c3fcaa0
dc1fad1ac2cb0e304c73198521dcf1e50779
0203 INTEGER 長度為3 bytes 內容為: e(publicExponent)
010001
028180 INTEGER 長度為128 bytes 內容為: d(privateExponent)
0554c882a75d8b3b4be18a7b9acd367b9632d9c2cb89239cd3fb367b924cfa98f8760d8ffb
0665ce3b458eaa841c010b62e6da9bc2dc76e314f3ebe694f8ae7e82bd7e8e3b7cbb17d4f1
4263d4c328bd5d16566004098953b851dbb87f802a38af73ccb9bfec9eaee7fac92b6daad9
6d7d49e90d68e5460a148aeb22334e6c41
0241 INTEGER 長度為65 bytes 內容為: p(prime1)
00f40c8cc874c39b3d452e5be257835d24cff6b2627de2af1666a799e073e6fd5997d238f7
a1641b0b5ac21bd5e0bbcbd0d932165f050fec3da3bcd2dbea24c505
0241 INTEGER 長度為65 bytes 內容為: q(prime2)
00f30963dc1df32b6d292be1e3faf1620256909aa20b4d27efffd8cc9bcb5b55f5edf9b1eb
99974d8ebb865500dbed5da95bd1de1b93e00c1def29778e8957c2e5
0240 INTEGER 長度為64 bytes 內容為: d mod(p-1) exponent1
62290a17369fd6b8f6328752aad0738e72f74f18be7986e303b735f549a9070e1a3abc1f1e
131dad9b7ba7a68716020ca6cfb69fd1716e1bfcd7de18063d73e1
0240 INTEGER 長度為64 bytes 內容為: d mod (q-1) exponent2
3ce3565c58388ae1af55ea22f6c4b0bc4b39b133f5c6dfc1960497c6545d4e9ced81081d31
7ea194a7d090cd454c2392018a03ae3f0efb9a2847e847128ba52d
0241 INTEGER 長度為65 bytes 內容為: q -1 mod p coefficient
00eb5a32f31620e1bb980467829c2a7c9d3b2f8d7f4f42131ed7a289825f0aeaf390b542c7
55c0dcc94dfaee609fba2c50731b6a1d197b7b9a91267acdade62f96
也可以直接使用OpenSSL命令以明文形式輸出金鑰的各個引數值,例如:
openssl rsa -in private_rsa.pem -text -out private.txt
然後就可以在private.txt檔案中檢視RSA金鑰中各個引數的值
相關推薦
OPENSSL中RSA私鑰檔案(PEM格式)解析
在PKCS#1 RSA演算法標準中定義RSA私鑰語法為: RSAPrivateKey ::= SEQUENCE { version Version, modulus INTEGER, -- n publicExponent INTEGER, -- e priv
RSA私鑰檔案(PEM-PKCS#1)解析
在PKCS#1 RSA演算法標準中定義RSA私鑰語法 RSAPrivateKey ::= SEQUENCE { version Version, //版本 modulus INTEGER, // RSA合數模 n publicExponent INTEGE
RSA私鑰檔案(PEM-PKCS#8)解析
22:d=1 hl=4 l=1191 prim: OCTET STRING [HEX DUMP]:308204a3 02010002 82010100 ccae938f 6186eb98 f11cac6b 09a3afb8 69a0b9f3 a7b2f4f4 826e4f32 06fc581d
RSA私鑰檔案(PEM)解析
在PKCS#1 RSA演算法標準中定義RSA私鑰語法 RSAPrivateKey ::= SEQUENCE { version Version, //版本 modulu
RSA公鑰檔案(PEM)解析
上一篇文章RSA私鑰檔案(PEM)解析講述了RSA私鑰檔案(PEM)的生成,本文講述RSA公鑰檔案(PEM)的生成。 注: 此文公鑰與上一篇私鑰不對應。 公鑰語法為: RSAPublicKey ::= SEQUENCE { modulus I
使用openssl命令剖析RSA私鑰檔案格式
Openssl提供了強大證書功能,生成金鑰對、證書,頒發證書、生成crl、驗證證書、銷燬證書等。本文將j介紹如何利用openssl的命令分析RSA私鑰檔案格式,同時也將簡單介紹幾種常見的私鑰檔案格式。 1 生成私鑰檔案 openssl有多種方法生成私鑰: genrs
Java前端Rsa公鑰加密,後端Rsa私鑰解密(支援字元和中文)
Java前端Rsa公鑰加密,後端Rsa私鑰解密(支援字元和中文) package com.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import j
在Mac os 中快速建立一個檔案(失敗篇)
最近開始上手使用Mac OS , 一開始很是不習慣,但漸漸的上手之後,真心覺得體驗上面比Windows要好太多了,對得起它這個價格的。 今天就說一個很簡單的操作 : 如何快速的建立一個任意格式的文字檔案 在Windows 上面右鍵之後可以很容易的建立一個檔案
如何在不知道Oracle備份檔案(DMP格式)的其他資訊時恢復檔案
背景:當拿到一個oracle的一個dmp格式的備份檔案時,不知道它的任何資訊,怎麼還原資料。這也是在偶然間胡亂搞出來的。不知道是否在任何情況下都有效! 我是利用Toad for Oracle工具實現的 1、在當前資料庫中建立一個新的使用者call(這時候使用者名稱可以隨便起
Ruby中對時間的使用(顯示格式)
標誌 描述%Y Year (four digits)%y Year (last two digits)%b, %B Short month, full month%m Month (number)%d
RSA私鑰和公鑰檔案格式 (pkcs#7, pkcs#8, pkcs#12, pem)
Format Name Description PKCS #7 Cryptographic Message Syntax Standard A PKCS #7 file can be used to store certificates, which is a Signed
如何使用openssl生成RSA公鑰和私鑰對
在ubuntu上要使用openssl的話需要先進行安裝,命令如下: sudo apt-get install openssl 安裝完成就可以使用openssl了。 首先需要進入openssl的互動介面,在命令行了輸入openssl即可; 1)生成RSA私鑰:
使用openssl生成RSA公鑰和私鑰對
在ubuntu上要使用openssl的話需要先進行安裝,命令如下: #sudo apt-get install openssl #openssl 首先需要進入openssl的互動介面,在命令行
使用OpenSSL生成RSA公鑰和私鑰
Windows下生成RSA公鑰和私鑰 開啟 openssl 資料夾下的 bin 資料夾,執行 openssl.exe 檔案 生成 RSA 私鑰,出現圖中提示說明生成成功 genrsa -out
從PFX檔案中獲取私鑰、公鑰證書、公鑰
該類具體功能:根據pfx證書得到私鑰、根據私鑰位元組陣列獲取私鑰物件、根據公鑰位元組陣列獲取公鑰、根據pfx證書獲取證書物件,根據私鑰、公鑰證書、密碼生成pkcs12,根據私鑰、公鑰證書、金鑰,合成為pfx檔案,依賴工具包:commons-io import
golang 生成RSA公鑰和私鑰檔案
package main import ("crypto/rand""crypto/rsa""crypto/x509""encoding/pem""os" ) func main() {//rsa 金
OPENWRT中SSH免密鑰登陸(具體步驟)
文件 登陸 如果 roo article 能夠 -m zed track 通過使用ssh-keygen生成公鑰,在兩臺機器之間互相建立新人通道極客。 如果本地機器是client,遠程機器為server。 1、使用ssh-keygen生成rsa k
用openssl生成rsa密鑰對
openssl rsa 生成私鑰openssl genrsa -out rsa_1024_pri.pem 1024生成公鑰openssl rsa -pubout -in rsa_1024_pri.pem -out rsa_1024_pub.pem用openssl生成rsa密鑰對
RSA私鑰加密解密
Copyright © 2018 Joyce_BY All rights reserved. Contact by [email protected] 實驗原理及演算法 generate key 本次模擬利用私鑰(n,sID)生成公鑰,具體過程如下: A)選擇
RSA演算法理論學習解惑――複製貼上RSA私鑰導致tengine出錯深入解析
轉自:https://yq.aliyun.com/articles/601036 原創文章:來自RSA演算法理論學習解惑――複製貼上RSA私鑰導致tengine出錯深入解析 tengine的程式碼中使用了RSA_check_key函式進行RSA私鑰格式正確性檢查,有一次載入私鑰測試時teng