输入对于带有BouncyCastle的RSA密码来说太大

本文关键字:密码 RSA 于带 BouncyCastle 输入 | 更新日期: 2023-09-27 18:33:00

我正在尝试以给定的时间间隔将SFTP的服务写入服务器,下载目录中的所有文件,然后解密它们进行处理。

解密方法一度有效,此后我没有对其进行任何修改。 我仍在使用与成功工作时相同的键。

我正在使用 PGPEncrypt、PGPDecrypt 和 PGPEncryptionKeys 类来查找 BouncyCastle:https://github.com/sledwith/PGP-Decryption-With-C-Sharp

此外,我还修改了代码,如下所示:使用BouncyCastle PGP解密文件的异常

如果您注意到,我评论了如何修复我的代码和解密工作。

现在,它不是。

有没有人知道为什么会发生这种情况,或者我该如何解决它?

输入对于带有BouncyCastle的RSA密码来说太大

我要猜测您正在使用 1024 位 RSA 公钥/私钥并尝试使用它加密 128 字节的东西?如果我是对的,请使用更大的 RSA 密钥(RSA 4096 将允许您加密最多 ~500 个字节)。

我在链接的帖子中注意到您说这是零星的。一些谷歌搜索表明,如果你在要加密的字节中有前导零,它可能能够处理完整的128字节。

另外 - 如果您只是使用密钥对加密"数据",则需要确保它不会超出这些限制(RSA 2048 为 240 字节左右,RSA 4096 为 500 字节左右,填充)。良好的做法和面向未来的是对所有数据实施对称密钥加密,然后仅使用 RSA 密钥来加密/解密密钥。

如果你没有明确地使用 PGP 过程,你可以在这里使用我的库:

https://github.com/zenith-nz/ObscurCore

它的"横幅功能"尚未完全激活(创建某种加密档案),但它似乎可以完成您想要的一切 - 它使用 ECDHC 方案 UM1 进行密钥派生,并实现各种块和流密码。它建在BouncyCastle之上。

我想

我解决了这个问题;请尝试此代码。

public string StringToDecrypt(string text)
{
    byte[] toDecrypt = Convert.FromBase64String(text);
    AsymmetricCipherKeyPair keyPair;
    using (var reader = File.OpenText(@"Private Key File Path"))
    {
        keyPair = (AsymmetricCipherKeyPair) new PemReader(reader).ReadObject();   
    }
    var engine = new RsaEngine();
    engine.Init(false, keyPair.Private);
    return Encoding.UTF8.GetString(engine.ProcessBlock(toDecrypt, 0, toDecrypt.Length));
}