2 .net private key public rsacryptoserviceprovider
我在.NET 2中使用RSACryptoServiceProvider,似乎公钥/私钥对的私有部分也总是包含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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |