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

时间:2013-09-26 17:47:10

标签: c# rsa bouncycastle openpgp

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

解密方法在某一点上工作,我从未修改过它。我仍然使用与成功工作时相同的密钥。

我在这里找到了BouncyCastle的PGPEncrypt,PGPDecrypt和PGPEncryptionKeys类:https://github.com/sledwith/PGP-Decryption-With-C-Sharp

此外,我修改了代码,如下所示:Exception on decrypting file using BouncyCastle PGP

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

现在,事实并非如此。

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

3 个答案:

答案 0 :(得分:3)

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

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

另外 - 如果你只是用密钥对加密“数据”,你需要确定它不会超出这些限制(对于RSA 2048大约240字节,对于RSA 4096考虑填充大约500左右)。良好实践和未来验证将是对所有数据实施对称密钥加密,并使用RSA密钥加密/解密密钥。

答案 1 :(得分:0)

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

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

它的“横幅功能”还没有完全激活(创建一种加密档案),但它会完成你想要的所有内容,它会出现 - 它使用ECDHC方案进行密钥派生,UM1,并实现了一个大的各种块和流密码。它建立在BouncyCastle之上。

答案 2 :(得分:0)

我想我解决了这个问题;请试试这段代码。

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));
}