【问题标题】:Bouncy Castle pem Reader Throws exception When Reading Public KeyBouncy Castle pem Reader 在读取公钥时抛出异常
【发布时间】:2020-11-13 00:30:35
【问题描述】:

我正在尝试使用公钥加密 C#(在 Unity 中)中的消息。为此,我使用了 Bouncy Castle 库。尝试使用充气城堡 pem 阅读器读取公钥时出现错误。我从here 获取了这段代码。我得到的具体错误是:

ArgumentException: illegal object in GetInstance: Org.BouncyCastle.Asn1.Dersequence

代码如下:

     static string encrypt(string plainText) {
        byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);

        PemReader pr = new PemReader(
            new StringReader(m_publicKey)
        );
        RsaKeyParameters keys = (RsaKeyParameters)pr.ReadObject();

        OaepEncoding eng = new OaepEncoding(new RsaEngine());
        eng.Init(true, keys);

        int length = plainTextBytes.Length;
        int blockSize = eng.GetInputBlockSize();
        List<byte> cipherTextBytes = new List<byte>();
        for (int chunkPosition = 0;
            chunkPosition < length;
            chunkPosition += blockSize)
        {
            int chunkSize = Math.Min(blockSize, length - chunkPosition);
            cipherTextBytes.AddRange(eng.ProcessBlock(
                plainTextBytes, chunkPosition, chunkSize
            ));
        }
        return Convert.ToBase64String(cipherTextBytes.ToArray());
    }

在实例化 pem 阅读器时发生错误。我的代码和链接的示例代码略有不同(我使用 StringReader 而不是从文件中读取),但如果我从文件中读取,我会得到相同的错误。有人有什么想法吗?

【问题讨论】:

    标签: c# encryption rsa bouncycastle


    【解决方案1】:

    好的,我希望这可以帮助其他犯此愚蠢错误的人。我的公钥格式为:

    -----END RSA PUBLIC KEY-----
    ...
    -----END RSA PUBLIC KEY-----
    

    显然这种格式不被接受。

    从页眉和页脚中删除“RSA”后,它能够加载公钥。

    编辑:如果对任何人有帮助,密钥是由 go 的 crypto/rsa 包生成的。 (GenerateKey函数)

    【讨论】:

    • 更改标题不会以任何方式更改密钥的格式。
    • 我的意思是,告诉充气城堡。当我删除“RSA”时,它起作用了。当“RSA”仍在标题中时,它不起作用。
    • 您从未解释过密钥的来源以及它是如何采用这种格式的。
    • 公平点,为了清楚起见,我将进行编辑,但这仍然意味着标题格式对于充气城堡很重要。
    • 是的,因为 Bouncycastle 在找到可行的格式之前不会尝试所有可能的格式,它使用标题作为格式提示。如果您将 wrong 标头放在上面,那么 Bouncycastle 将尝试根据该错误提示解析它并且会失败。 BEGIN RSA PUBLIC KEY 表示特定于 RSA 的 pkcs#1 标头。 BEGIN PUBLIC KEY 表示适用于其他类型的公钥以及 RSA 的 RFC 5280 SubjectPublicKeyInfo 标头。
    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多