C# OpenSSL RSA示例

C# OpenSSL RSA示例,c#,.net,encryption,cryptography,openssl,C#,.net,Encryption,Cryptography,Openssl,我必须在我的C#项目中使用加密(OpenSSL),我可以使用所有对称密码和消息摘要,但我不能使用RSA。请问,有人知道怎么用吗? 我指的是如何自动或手动操作私钥/公钥(使用大整数) 编辑 byte[] msg = System.Text.Encoding.ASCII.GetBytes("text to encrypt"); OpenSSL.Crypto.RSA rsa = new OpenSSL.Crypto.RSA(); byte[]result = rsa.PrivateEncrypt(ms

我必须在我的C#项目中使用加密(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消息:“试图读取或写入受保护的内存。这通常表示其他内存已损坏。”

我发现缺少一些东西,配置RSA密钥否?

您在microsoft网站上检查过这个吗?
这是一个完整的RSA在.Net中的文档,最后还有一个例子!它很容易理解和重用

更新1 这是在C++中,它使用的是RSA。它应该很容易理解,因为它接近C#
如果我有其他问题,我会有更多关于我答案的更新。。我只是想为你发布一个起点,让你知道。
更新2
因此,有一个答案未标记为正确答案。。但是我认为它可能有用,看看吧
更新3

如果您使用的是OpenSSL wrapper for.Net,请将此作为主要源代码检查,并将此子代码作为第一个源代码的一部分检查,以获取有关RSA密钥的信息

您可以查看这个包装器的测试套件

您可以找到一个RSA加密/解密测试。只需阅读TestKey方法,使用该库应该很容易,没有任何问题,如果有任何问题,请告诉我

更新

要生成和保存密钥,请执行以下操作:

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)
如果存在密码,此方法应返回密码

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消息:“试图读取或写入受保护的内存。这通常表示其他内存已损坏。”


我发现缺少一些东西,要配置RSA密钥否?

请添加更多详细信息。。为什么它不适合你?这是理解问题还是编译错误?您好,我想加密/解密bytes[]格式的任何数据,因为缺少文档,所以我找不到任何tuto或RSA示例。您可以发布不适合您的代码吗?+告诉我你是如何生成密钥的。是的,我使用了MS库,因为它的文档比较简单,我必须在我的项目中使用一个外部库,一个开源库(OpenSSL),当你可以轻松地使用MS库时,有没有理由使用这个库?我建议你为了学习而继续努力,我将为你查找一些例子(如果有的话)。。然而。。如果没有理由不使用MS库。。我建议你现在就用它来节省时间!在我的项目中,我需要加密/解密文件,所以我使用了MS库,因为这很简单,但我的老板告诉我,我必须使用一个外部库,一个开源库,所以我找到了“bouncy castle”和“OpenSSL”,直到现在我发现如何使用OpenSSL的加密来用对称密码(AES,BlowFish…)加密/解密文件,但我不能使用RSA。我试图找到任何例子或文档,但没有办法。非常感谢您的帮助;)它可以追溯到2003:s,OpenSSL库包含了太多的新类和方法。例如,为了创建AES256密码,我使用以下指令OpenSSL.Crypto.CipherContext cc=new OpenSSL.Crypto.CipherContext(OpenSSL.Crypto.Cipher.AES_256_CBC);“我找到了构造函数OpenSSL.Crypto.RSA RSA=new OpenSSL.Crypto.RSA();但现在如何配置密钥?自动还是手动?…我的意思是wich方法。我总是从pem文件提供密钥。看看正在使用此项目的Console应用程序,您可以从git下载并调试它,以了解其工作原理。基本思想是使用此库和方法rsa生成密钥。GenerateKeys保存它们。(2个私有和公共文件),然后从硬盘读取它们来加密/解密文本。是的,我想是这样,但看看rsa.GenerateKeys方法(int位,OpenSSL.Core.BigNumber e,OpenSSL.Core.BigNumber.GeneratorHandler回调,object arg)bits=key length BigNumber=大整数我猜是P和Q,但最后一个我不明白。你应该把它编辑到你的问题中-谢谢。是的,看起来你需要先设置密钥,但我不知道那个API。