2016-03-24 34 views
2

我已經由該命令產生一個RSA密鑰密鑰大小:Openssl的RSA

openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048 

我導出的密鑰爲DER格式,這是二進制形式。關鍵是Waaay超過2k位。爲了測試,我將公鑰導出爲DER格式,該格式略大於2k位。

那麼問題是什麼2048位?我如何從生成的文件中獲取原始位?

感謝, 利

+0

你想得到你的原始位?您想使用哪種語言或工具? – user2807083

+0

Stack Overflow是編程和開發問題的網站。這個問題似乎與題目無關,因爲它不涉及編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[信息安全堆棧交換](http://security.stackexchange.com/)會是一個更好的問題。另外[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306)。 – jww

+0

我想寫一個CPU的FLASH的密鑰。 CPU將使用密鑰來加密/解密消息,並通過無線接口發送。 – Lev

回答

0

爲了使用RSA密鑰進行加密和解密,您需要模數,私有和公有指數。

通常使用夫妻(模數,公開指數)和使用夫妻(模數,私人指數)解密來執行加密。

現在在一些實現中,就像經常在嵌入式設備上一樣,公共指數默認設置爲名爲F4的數字,即0x10001或65537十進制。

使用2048位的RSA密鑰,私有指數正好是2048位,以及模數。

您可以通過做一些字符串操作得到的二進制格式專用指數:

openssl rsa -in key.der -inform der -text -noout | awk '/^[^ ]/{if($1 == "privateExponent:") {dump=1} else {dump=0}} /^ /{if(dump==1){gsub(":","");printf "%s", $1}}END{print ""}' | xxd -ps -r -c256 > pr_key.bin 

您還可以通過awk命令替換字符串得到模量。

在恢復中,要存儲您的2048位私鑰,您需要4096位(512字節)。要存儲公鑰,您需要2048位(256字節)。

+0

謝謝,這就是我一直在尋找的。但是,事實證明,我們正在使用的庫需要DER格式,這很容易生成。站在愚蠢的,併爲噪音抱歉。 – Lev

0

編輯3/4:

我還沒有找到一個方便易辦法做到這一點。無論如何,你可以嘗試以下操作:

openssl rsa -in <yourfile> -noout -text

,並顯示有關私鑰的更多信息。查詢wikipedia瞭解如何使用給定信息計算密鑰。

舊方案(不工作,因此應該忽略)

對於自動化過程或只是單純的教育目的是什麼?

手動方法可能是以下(假設你是一個Linux用戶):

  • 使鑰匙文件

  • 打開使用vi(米)的PEM文件的副本,去除第一和最後一行(BEGIN/END私鑰)

  • 卸下換行符(例如:%S/\ n //克)

  • 保存文件

  • 現在的base64解碼文件(的base64 -d [your file name here] > [destination]

但最有可能的OpenSSL提供了一個更方便易的方式來實現這一目標

編輯1:

如果pem/der存儲除密鑰外的其他信息,則這可能是錯誤的。

編輯2:

而且我從來沒有見過一個理由提取私鑰還沒有(或者甚至產生一個在你的方式)。

你想實現什麼目標?

+0

*「刪除換行符...」* - 如果您刪除封裝前後封面的換行符('----- BEGIN X -----'和'----- END X -----'),那麼鍵可能不會被解析,你可以得到***'PEM_read_bio:no start ...'***錯誤。 – jww

+0

準確地說,這就是爲什麼第一步是製作密鑰的副本;)所以我們仍然有一個正確的pem文件,以便以後使用。 –

+0

如果使用DER格式,這樣做會得到相同的結果。仍然不是2048bits。我想將密鑰存儲在MCU的存儲器中。 – Lev