2012-04-18 113 views
-7

我用sn.exe來生成密鑰對(私鑰和公鑰)。我提取私有密鑰的公共密鑰如下:從私鑰中提取公鑰C#

sn -p keyPair.snk publicKey.snk

我使用C#讀它,它在數據庫中存儲爲二進制使用加密我的數據。

有沒有什麼辦法從C#中的私鑰提取公鑰而不使用sn.exe

注意:我想要一個公鑰作爲byte來比較它和我在我的數據庫中存儲的公鑰。

+0

爲什麼使用公鑰加密,以及爲什麼使用sn.exe來生成密鑰?你試圖防範什麼是安全威脅? – Brian 2012-04-18 21:23:19

+0

[如何導入在.NET中使用sn.exe生成的.snk文件?](http://stackoverflow.com/questions/3095355/how-to-import-an-snk-file-generated-with -sn-exe-in-net) – finnw 2012-06-07 10:48:28

回答

10

有沒有什麼辦法從C#中的私鑰中提取公鑰而不使用sn.exe?

這是令人驚訝的困難,但它是可能的;我已經這樣做了。

你需要做的是在mscorwks.dll中對StrongNameGetPublicKey進行p/invoke。

我使用C#讀它,它在數據庫中存儲爲二進制使用加密我的數據

這是一個非常糟糕的主意。強名稱公鑰的目的不是加密你的數據!強名公鑰的目的是,供客戶驗證您提供給他們的程序集是由您編寫的。如果您使用的是公共密鑰而不是該任務您正在做的事情非常非常錯誤您應該立即停止這樣做。

強名稱使用加密,但它們不是加密技術;他們是證據產生技術的目的代碼訪問安全策略評估

+0

BY使用SN.EXE。我可以用1024 - 2048位生成RSA密鑰 那麼,如果我使用它來加密我的數據,那麼錯誤是什麼? 我試圖使用PUTTY-GEN,但它的DOSEN'T工作在C# 我的問題是做一個多重ENCYPTION來加密安全數據 和解密數據後,我恢復我的數據庫中的私人密鑰...。 我想與我的數據庫中的適合的公鑰匹配每個私鑰 因此我需要從我的私鑰中提取公鑰......。 任何建議 – Amin 2012-04-18 21:08:51

+17

可能想在鍵盤上輕按一下「Caps Lock」鍵。 – 2012-04-18 21:17:35

+5

@ user726072:我的建議是你**使用正確的工具**。如果你打算爲加密生成一個RSA密鑰,那麼爲什麼你會用一個專門用來強制命名文件的工具?只需創建一個'RSACryptoServiceProvider'的實例!然後您可以從RSAParameters中獲取指數和模數。 – 2012-04-18 21:20:18