2012-04-18 224 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