锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / openssl开源 / C#环境下openssl库不能使用RSA
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

C#环境下openssl库不能使用RSA


提问

我的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)

如果有密码,上面代码能返回

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内