2017-08-01 62 views
0

我想問一下關於C#上RSA登錄的問題。帶有自己的十六進制編碼的RSA參數的簽名文檔

我有一個文件的標誌。我有模數,私人指數和公開指數的純十六進制值。我不想用隨機生成的密鑰進行簽名。當我用標誌工具嘗試標誌時,我已經完美地獲得了結果。但是我不能用C#來完成。我是這類問題的新手。所以我非常困惑。

我看了很多網站和arcticles,但我找不到任何解決方案。也許有,但我無法得到它,我不知道。

如果你能向我詳細解釋(步驟),我會很感激。

回答

0

在.NET中,你需要私鑰的全套CRT參數,所以如果你有D,你還需要P,Q,DP,DQ和InverseQ。

RSAParameters rsaParams = new RSAParameters(); 
rsaParams.Modulus = ParseHex(modulus); 
rsaParams.Exponent = ParseHex(exponent); 
rsaParams.D = ParseHex(d, rsaParams.Modulus.Length); 
rsaParams.P = ParseHex(p, (rsaParams.Modulus.Length + 1)/2); 
rsaParams.Q = ParseHex(q, rsaParams.P.Length); 
rsaParams.DP = ParseHex(dp, rsaParams.P.Length); 
rsaParams.DQ = ParseHex(dq, rsaParams.P.Length); 
rsaParams.InverseQ = ParseHex(inverseQ, rsaParams.P.Length); 

RSA rsa = RSA.Create(); 
rsa.ImportParameters(rsaParams); 

ParseHex(string str, int len=-1)是解析十六進制字符串爲固定長度陣列的例行程序(如果該十六進制字符串短,在陣列應留有填充用0字節值)。