用Bouncy Castle的C#版API产生公钥和私钥 如何保存成文件与加载 这个作者还写了个后篇,只是保存16进制DER编码格式,而非常见的pem字符串或xml字符串格式,没法用。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写Pem字符串比较容易,用Org.BouncyCastle.OpenSsl.PemWriter就可以了。格式类似以下的例子:static void Main(string[] args){ string pem = @"-----BEGIN RSA PRIVATE KEY----- MIICWwIBAAKBgQCuvrDVWxG0GA3vL8WBeHLS/eH49evvEc/+9cqdNUASeK++O/Ha L/BFzNY3EXm7Q0fZaQybp7sUZAS1XY3ySljJFRmNQBcyyVdEe4FUpLnoiO5Je5/v 3Ok8cSyC6lTjYfM5XDNbPpIP12+rFGtmgsnHLobk/vgoR99OEcVFVkbgDQIBEQKB gQCkdz0FCmsD2md3tH2nB/OZZ2tEqzhoiTw7Qa+jBPECU3g6ksWCDwBBsbqOLpCw P1KugPzOu/tefECqsmd6oFOOg6Z0+ZZ5pJU6yuGIPW9eQ0WjSQJVmQE57fUZnsP2 xGIwGL8/99jWHEncJL/o+0oOP9jcZ31zPajc8Pqo76M88QJBAOpCMmW89DtLcneq rOyndg6vmo8KKpNKVg1lMCOLDOBrqtyRHOL/n7nWmX6e1y0mc5ZBW0RBbVl6Ur8Q EoS1QdECQQC+9n6RKl1PLUOMRwb2zB5SxLFvA0pXDZjW8ueOGaBQ3ztlVwpkPAyf ipeuwKfKpKR0bx+MwXB84ZCSqt9S9C19AkEAwOs4kAUFXgHly/X30fNSKjZDDGK5 pnl0CwgJhq6/T2e54tHbjcN0euz24L8Ljpgi9DXSsK5aDXPLrGeWx6RUUQJAe5Bw A5PiBg46xC31coQTnve+GqfGsMyQEp0sawGF2fnbI3SOQNuPsobankBski5MS1b2 TASyMrASQMjq21K0BQJAEx/dAjP9NtN7x4WJylhtY9RZPAeqDRxHKYNiLTOWB03L dCzFm4VLgHjXRkmeuQ/MWmNR/XhXChXh1PWKSrCJmQ== -----END RSA PRIVATE KEY-----"; AsymmetricCipherKeyPair pair = ReadPem(pem); var rsa = new RsaEngine(); rsa.Init(true, pair.Public); byte[] encrypted = rsa.ProcessBlock(Encoding.UTF8.GetBytes("hello"), 0, 5); rsa.Init(false, pair.Private); string decrypted = Encoding.UTF8.GetString(rsa.ProcessBlock(encrypted, 0, encrypted.Length)); // hello}static string WritePem(AsymmetricCipherKeyPair pair){ using (TextWriter textWriter = new StringWriter()) { var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(textWriter); pemWriter.WriteObject(pair.Private); return textWriter.ToString(); }}static AsymmetricCipherKeyPair ReadPem(string pem){ using(TextReader reader = new StringReader(pem)) { var obj = new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject(); return obj as AsymmetricCipherKeyPair; }} 这里不是应用,而是 //RSA密钥构造器的参数 RsaKeyGenerationParameters param = new RsaKeyGenerationParameters( Org.BouncyCastle.Math.BigInteger.ValueOf(3), new Org.BouncyCastle.Security.SecureRandom(), 1024, //密钥长度 25); //用参数初始化密钥构造器 keyGenerator.Init(param);生成密钥后如何生成pem 格式数据导出成pem文件,而不是用openssl生成。 // ... 你的代码 //产生密钥对AsymmetricCipherKeyPair keyPair = keyGenerator.GenerateKeyPair();// 我提供的例子就有WritePem:string pem = WritePem(keyPair);File.WriteAllText("文件名", pem); 突发奇想,可以通过编写程序去检验图片是否PS过吗? 分页的呈现方式 立马给分 在c#中如何对数据库进行备份还原 C# 数组 c/s简单问题 谁能给我一个支持多个主键并可以按任意字段排序的分页存储过程?急啊,谢谢! C# winform 有关parent的问题 当LISTVIEW的Dock为Fill时的Cloumn 设置的宽度不起作用?UP有分 如何关闭axWebBrowser文件下载对话框 如何读取用户在IE中定义的书签? 弹出窗体高手进,只有4行简单的代码,第一个解决得70分 请教WebClient下载文件显示进度条的问题
{
string pem =
@"-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQCuvrDVWxG0GA3vL8WBeHLS/eH49evvEc/+9cqdNUASeK++O/Ha
L/BFzNY3EXm7Q0fZaQybp7sUZAS1XY3ySljJFRmNQBcyyVdEe4FUpLnoiO5Je5/v
3Ok8cSyC6lTjYfM5XDNbPpIP12+rFGtmgsnHLobk/vgoR99OEcVFVkbgDQIBEQKB
gQCkdz0FCmsD2md3tH2nB/OZZ2tEqzhoiTw7Qa+jBPECU3g6ksWCDwBBsbqOLpCw
P1KugPzOu/tefECqsmd6oFOOg6Z0+ZZ5pJU6yuGIPW9eQ0WjSQJVmQE57fUZnsP2
xGIwGL8/99jWHEncJL/o+0oOP9jcZ31zPajc8Pqo76M88QJBAOpCMmW89DtLcneq
rOyndg6vmo8KKpNKVg1lMCOLDOBrqtyRHOL/n7nWmX6e1y0mc5ZBW0RBbVl6Ur8Q
EoS1QdECQQC+9n6RKl1PLUOMRwb2zB5SxLFvA0pXDZjW8ueOGaBQ3ztlVwpkPAyf
ipeuwKfKpKR0bx+MwXB84ZCSqt9S9C19AkEAwOs4kAUFXgHly/X30fNSKjZDDGK5
pnl0CwgJhq6/T2e54tHbjcN0euz24L8Ljpgi9DXSsK5aDXPLrGeWx6RUUQJAe5Bw
A5PiBg46xC31coQTnve+GqfGsMyQEp0sawGF2fnbI3SOQNuPsobankBski5MS1b2
TASyMrASQMjq21K0BQJAEx/dAjP9NtN7x4WJylhtY9RZPAeqDRxHKYNiLTOWB03L
dCzFm4VLgHjXRkmeuQ/MWmNR/XhXChXh1PWKSrCJmQ==
-----END RSA PRIVATE KEY-----";
AsymmetricCipherKeyPair pair = ReadPem(pem); var rsa = new RsaEngine();
rsa.Init(true, pair.Public);
byte[] encrypted = rsa.ProcessBlock(Encoding.UTF8.GetBytes("hello"), 0, 5);
rsa.Init(false, pair.Private);
string decrypted = Encoding.UTF8.GetString(rsa.ProcessBlock(encrypted, 0, encrypted.Length)); // hello}static string WritePem(AsymmetricCipherKeyPair pair)
{
using (TextWriter textWriter = new StringWriter())
{
var pemWriter = new Org.BouncyCastle.OpenSsl.PemWriter(textWriter);
pemWriter.WriteObject(pair.Private);
return textWriter.ToString();
}
}static AsymmetricCipherKeyPair ReadPem(string pem)
{
using(TextReader reader = new StringReader(pem))
{
var obj = new Org.BouncyCastle.OpenSsl.PemReader(reader).ReadObject();
return obj as AsymmetricCipherKeyPair;
}
}
//RSA密钥构造器的参数
RsaKeyGenerationParameters param = new RsaKeyGenerationParameters(
Org.BouncyCastle.Math.BigInteger.ValueOf(3),
new Org.BouncyCastle.Security.SecureRandom(),
1024, //密钥长度
25);
//用参数初始化密钥构造器
keyGenerator.Init(param);生成密钥后如何生成pem 格式数据导出成pem文件,而不是用openssl生成。
//产生密钥对
AsymmetricCipherKeyPair keyPair = keyGenerator.GenerateKeyPair();// 我提供的例子就有WritePem:
string pem = WritePem(keyPair);
File.WriteAllText("文件名", pem);