2010-02-19 69 views
0

在很短的問題:我如何填寫RSAParameters如果我從第三方?:具有下列輸入.net中RSA公鑰模數和指數的格式是什麼?

模量:123456

Exponet:111

在一個漫長的故事,我使用以下代碼:

RSACryptoServiceProvider RSAalg = new RSACryptoServiceProvider(2048);

RSAParameters rsaPublic = RSAalg.ExportParameters(false);

然後我可以在byte []中獲得rsa公鑰的模數和指數。爲了寫在ASN.1格式

 RSAPublicKey ::= SEQUENCE { 
      modulus   INTEGER, -- n 
      publicExponent INTEGER -- e 
     } 

我用ASN.1庫,以字節[]轉換到其BIGINTEGER格式這些信息,但是這個字節[]應該是一樣的格式{0 ','1','2','3','4','5','6','7','8','9'},假設它是十進制的。

但它看起來像rsaPublic.modulus和rsaPublic.exponent不是這種格式,在模數和指數的byte []中有很多非數字。那麼rsaPublic.modulus和rsaPublic.exponent的格式是什麼,以及如何將它們轉換爲格式如{'0','1','2','3','4','5 ','6','7','8','9'}?

非常感謝

回答

0

該格式在ASN.1參考中指定。使用的格式稱爲DER編碼,用於整數。 A reference可用於這些醜陋的編碼。你確定沒有更簡單的方法將這些值作爲bigint嗎?

編輯

看起來你可以通過RSACryptoServiceProvider.ExportParameters()得到一個RSAParameters對象,然後從這個ExponentModulus領域提取得到的byte []數組。

+0

我使用了一個asn.1庫。它可以很容易地處理asn.1公鑰格式。但問題是我不知道如何將byte []中的.net模數轉換爲合理的字節[],如{'0','1','2','3','4','5' ,'6','7','8','9'},字節[]中的rsa模量似乎沒有意義,它是以某種格式編碼的? – travellover 2010-02-19 00:38:10

+0

它基本上是作爲大端字節數組的整數,前面有一些標題字節。等價地,它是以256爲底數表示的整數。你想用byte []來做什麼,那麼也許我可以給出更好的線索。 – 2010-02-19 00:45:21

+0

我需要它們通過.net RSA模數和指數生成PKCS#1 asn.1 RSA公鑰。 我的方法是使用asn.1庫。它可以在base-2,base-18,base-10或base-16中接受byte []中的模數和指數,然後生成自己的大整數,然後生成PKCS#1公鑰格式。 所以首先我想通過.net RSA模數和指數生成biginteger。 .net RSA模數和指數在byte []中,但並不是所有這些byte []中的元素都是ASCII數字,對不對? 我希望你能理解我在說什麼。 – travellover 2010-02-19 05:44:27

0

byte[]值表示大整數的字節編碼的Big Endian表示。這幾乎與DER編碼一樣,但不完全相同。

對於ModulusRSAParameters結構需要DER值,但刪除了可選的符號填充0x00字節。對於Exponent這是一樣的。

如果你有一個私鑰結構,那麼D必須具有相同的長度byte[]Modulus(這可能意味着你必須預先考慮0x00值)。 PQDPDQ,和InverseQ是如果指定D所有必需的,而且必須有正好一半Modulus的長度,這可能需要去除DER填充字節或可能需要插入一些。

+0

如果屬實,那麼我的回答是錯誤的,我會刪除它。你怎麼解決這個問題的? – 2016-09-27 22:21:41

+0

@JamesKPolk這是有點折磨,但https://github.com/dotnet/corefx/blob/6225e48bd3945f245a9f96fe46ee1cfc05fa57bd/src/System.Security.Cryptography.X509Certificates/tests/PublicKeyTests.cs#L129-L152。如果您閱讀DER/ASN.1解碼器中的相關證書,您將看到期望的模數和指數與沒有標籤和長度(以及模數值的填充字節)的DER值相同。雖然我有點擔心,但我的答案意味着標籤和長度應該存在...... – bartonjs 2016-09-27 22:38:39

相關問題