精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
我的C#项目里用到了Crypto(openssl),我能用对称加密和消息摘要,但我不能用RSA,主要是不能操纵私有/公开密钥,在大数环境下不管自动或手工都有问题。
byte[] msg = System.Text.Encoding.ASCII.GetBytes("text to encrypt"); OpenSSL.Crypto.RSA rsa = new OpenSSL.Crypto.RSA(); byte[]result = rsa.PrivateEncrypt(msg, OpenSSL.Crypto.RSA.Padding.None); Console.WriteLine(Convert.ToBase64String(result));
遇到异常AccessViolationException,消息是:“Attempted to read or write protected memory. This is often an indication that other memory is corrupt.”。
换另外一个openssl封装试下。
用下面代码生成和保存密钥:
OpenSSL.Crypto.RSA rsa = new OpenSSL.Crypto.RSA(); rsa.GenerateKeys(1024, 65537, null, null); File.WriteAllText("MasterPrivateKey.pem", rsa.PrivateKeyAsPEM); File.WriteAllText("MasterPublicKey.pem", rsa.PublicKeyAsPEM);
用如下代码创建RSA类:
RSA rsa = RSA.FromPrivateKey(bin, OnPassword, null);
bin是BIO类的实例,应该包含要加密/解密的文本。从控制台读取读取文件的代码如下:
public static BIO GetInFile(string infile) { BIO bio; if (string.IsNullOrEmpty(infile)) { bio = BIO.MemoryBuffer(); Stream cin = Console.OpenStandardInput(); byte[] buf = new byte[1024]; while (true) { int len = cin.Read(buf, 0, buf.Length); if (len == 0) break; bio.Write(buf, len); } return bio; } return BIO.File(infile, "r"); }
OnPassword是PasswordHandler委托的实例,具备签名。
public static string OnPassword(bool verify, object arg)
如果有密码,上面代码能返回