我是密码学的新手。我读过对称和非对称算法分别使用一个和两个加密密钥。并且这些密钥必须存放在安全的地方。但当我在网上搜索有关如何在asp.net中进行加密的教程时,我发现了一些奇怪的东西!例如this tutorial。
加密或解密数据时,没有存储或提供的公钥或私钥!我无法理解。
我遇到的另一个问题是,到目前为止我发现的所有教程都是代码,没有任何解释这些代码是什么以及使用的原因。我很感激任何好的教程。
答案 0 :(得分:5)
来自RSACryptoServiceProvider Constructor:
如果未找到默认密钥,则会创建一个新密钥。
此构造函数创建一个适合加密会话密钥的Exchange密钥对,以便可以安全地存储和与其他用户交换。生成的密钥对应于使用非托管Microsoft Cryptographic API(CAPI)中使用的AT_KEYEXCHANGE值生成的密钥。
所以它只是生成一个新的密钥对,如果它找不到已经创建的密钥对;除了基于会话的数据之外,你不应该使用它。
一点背景(我假设您使用的是Windows),非对称密钥对与证书相关联。这些证书是您用来信任非对称密钥的证书。每个证书都可以由证书颁发机构(发出非对称密钥的权限)签名,如果您信任证书颁发机构,则您信任属于该机构签署的证书的非对称密钥。所有这些证书都存储在“证书存储”中,即“密钥存储”(Java),“密钥环”(Mac)。
您可以通过Start > Run > certmgr.msc
查看证书。您的证书属于个人>证书。如果您打开一个,然后转到Certificate Path
选项卡,您将看到证书链到证书颁发机构。如果在您的Trusted Root Certification Authorities > Certificates
商店中找到属于证书颁发机构的“根”证书,则证书将被视为有效且受信任。
如果要为用户加密某些内容,则应进入其证书存储区,并提取其加密证书。为此,您应该打开“当前用户”密钥存储区,并遍历其中的所有证书,并选择密钥用法为“密钥加密”的密钥存储区,如果不止一个,请询问用户哪个他想用。
如果要使用服务帐户加密某些内容(例如,如果您是Web服务器),则应使用“本地计算机”密钥存储区中的证书,并仅授予您的服务帐户对相关私钥的读取权限使用您要使用的证书。
这可以使用X509Store Class完成,例如:
X509Store certificateStore = new X509Store("MY", StoreLocation.CurrentUser);
X509Certificate2Collection allCertificates = certificateStore.Certificates;
//Iterate through all certificates
“我的”代表个人证书,其余的可以找到here。 CurrentUser表示用户键,另一个选项是LocalMachine。
获得要使用的证书后,应使用公钥进行加密,使用私钥进行解密,并使用对称密钥。因此,如果您想要加密大量数据,那么您将要做的是:
当你解密时,你应该:
我有一堆代码示例,如果您想看看,请告诉我您需要帮助的部分。
这可能有点令人困惑,所以让我知道你想澄清什么。