带有传输的C#RSA加密/解密

我在C#网上看到了很多使用System.Security.Cryptography.RSACryptoServiceProvider的加密/解密教程和示例,但是我希望能够做到的是:

  • 创建RSA公钥/私钥对
  • 传输公钥(或为概念证明,只需将其移至字符串变量中)
  • 创建一个新的RSA加密提供程序并使用公共密钥加密一个字符串
  • 将加密的字符串(或数据)发送回原始的加密提供程序并解密该字符串

有人可以为此指出我有用的资源吗?

回答:

嗯,确实有足够的示例,但是无论如何,在这里

using System;

using System.Security.Cryptography;

namespace RsaCryptoExample

{

static class Program

{

static void Main()

{

//lets take a new CSP with a new 2048 bit rsa key pair

var csp = new RSACryptoServiceProvider(2048);

//how to get the private key

var privKey = csp.ExportParameters(true);

//and the public key ...

var pubKey = csp.ExportParameters(false);

//converting the public key into a string representation

string pubKeyString;

{

//we need some buffer

var sw = new System.IO.StringWriter();

//we need a serializer

var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));

//serialize the key into the stream

xs.Serialize(sw, pubKey);

//get the string from the stream

pubKeyString = sw.ToString();

}

//converting it back

{

//get a stream from the string

var sr = new System.IO.StringReader(pubKeyString);

//we need a deserializer

var xs = new System.Xml.Serialization.XmlSerializer(typeof(RSAParameters));

//get the object back from the stream

pubKey = (RSAParameters)xs.Deserialize(sr);

}

//conversion for the private key is no black magic either ... omitted

//we have a public key ... let's get a new csp and load that key

csp = new RSACryptoServiceProvider();

csp.ImportParameters(pubKey);

//we need some data to encrypt

var plainTextData = "foobar";

//for encryption, always handle bytes...

var bytesPlainTextData = System.Text.Encoding.Unicode.GetBytes(plainTextData);

//apply pkcs#1.5 padding and encrypt our data

var bytesCypherText = csp.Encrypt(bytesPlainTextData, false);

//we might want a string representation of our cypher text... base64 will do

var cypherText = Convert.ToBase64String(bytesCypherText);

/*

* some transmission / storage / retrieval

*

* and we want to decrypt our cypherText

*/

//first, get our bytes back from the base64 string ...

bytesCypherText = Convert.FromBase64String(cypherText);

//we want to decrypt, therefore we need a csp and load our private key

csp = new RSACryptoServiceProvider();

csp.ImportParameters(privKey);

//decrypt and strip pkcs#1.5 padding

bytesPlainTextData = csp.Decrypt(bytesCypherText, false);

//get our original plainText back...

plainTextData = System.Text.Encoding.Unicode.GetString(bytesPlainTextData);

}

}

}

附带说明:对Encrypt()和Decrypt()的调用具有一个布尔参数,该参数在OAEP和PKCS#1.5填充之间切换…如果您遇到的情况可用,则可能要选择OAEP

以上是 带有传输的C#RSA加密/解密 的全部内容, 来源链接: utcz.com/qa/423442.html

回到顶部