【发布时间】:2016-03-27 08:24:41
【问题描述】:
我有两个 XML 文件,其中包含由 RSACryptoServiceProvider 类生成的私钥和公钥。我已将随机字符串转换为字节数组,并使用私钥对其进行了加密。但是如何使用公钥再次解密 byte[] 呢?这是我目前所拥有的:
class Program
{
static void Main(string[] args)
{
RSACryptoServiceProvider encryptor = new RSACryptoServiceProvider();
encryptor.FromXmlString(GetPrivateKey());
string unencryptedString = "This string could only have been send by me.";
byte[] unencryptedByteArray = Encoding.Unicode.GetBytes(unencryptedString);
byte[] encryptedByteArray = encryptor.SignData(unencryptedByteArray, new SHA1CryptoServiceProvider());
byte[] decryptedByteArray; //how do I decrypt the array again?
string decryptedString = System.Text.Encoding.Unicode.GetString(decryptedByteArray);
Console.WriteLine(decryptedString);
Console.ReadKey();
}
private static string GetPrivateKey()
{
using (TextReader reader = new StreamReader(@"path to private key file generated by the ToXmlString method"))
{
string privateKey = reader.ReadToEnd();
reader.Close();
return privateKey;
}
}
private static string GetPublicKey()
{
using (TextReader reader = new StreamReader(@"path to public key file generated by the ToXmlString method"))
{
string privateKey = reader.ReadToEnd();
reader.Close();
return privateKey;
}
}
}
【问题讨论】:
-
如果您有对称密码(如 RSA)的公钥和私钥,则加密与解密的过程相同。如果你用公钥加密数据,用私钥加密,你会得到原始数据(反之亦然)。
-
签名!= 加密。签名的逆过程是验证,为了执行该步骤,您仍然需要访问原始数据。
-
@libik:“如果你用公钥加密数据,用私钥加密,你会得到原始数据” - 你的意思是“如果你用公钥解密数据,用私钥加密,你得到原始数据”??
-
@Zotyi - 已有 6 年的评论,但据我所知,RSA 的加密和解密没有区别。也许说“如果您将公钥应用于应用了私有的数据,您将获得原始数据(反之亦然)”会更有意义
标签: c#