作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 .NET 2 中使用 RSACryptoServiceProvider,似乎公钥/私钥对的 Private 部分也总是包含 Public 部分。
我需要使用我的公钥加密一些信息,并允许对方只解密我加密的内容。我不希望他们知道我是如何加密我的信息的。在 .NET 中使用 RSACryptoServiceProvider 是否可行?
最佳答案
私钥始终包含公钥。
您可能真正想要的是签名。使用相同的 .NET 类,您可以使用您的私钥对数据进行签名,并使用公钥(显然不包含私钥)验证对方的签名。
public static string Sign(string data, string privateAndPublicKey)
{
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
RSACryptoServiceProvider provider = CreateProviderFromKey(privateAndPublicKey);
byte[] signatureBytes = provider.SignData(dataBytes, "SHA1");
return Convert.ToBase64String(signatureBytes);
}
public static bool Verify(string data, string signature, string publicKey)
{
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
byte[] signatureBytes = Convert.FromBase64String(signature);
RSACryptoServiceProvider provider = CreateProviderFromKey(publicKey);
return provider.VerifyData(dataBytes, "SHA1", signatureBytes);
}
private static RSACryptoServiceProvider CreateProviderFromKey(string key)
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(key);
return provider;
}
关于.net - RSA 私钥是否始终包含公钥,还是只是 .NET?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/301302/
我是一名优秀的程序员,十分优秀!