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

C# 对于带有BouncyCastle的RSA密码,输入太大,c#,rsa,bouncycastle,openpgp,C#,Rsa,Bouncycastle,Openpgp,我试图在给定的时间间隔内将服务写入SFTP到服务器,下载目录中的所有文件,然后解密以进行处理 解密方法在某一点上起作用,从那以后我再也没有修改过它。我仍在使用与它成功工作时相同的键 我正在使用用于BouncyCastle的PGPEncrypt、PGPDecrypt和PGPEncryptionKeys类,可在此处找到: 此外,我还修改了代码,如下所示: 如果你注意到了,我评论了如何修复我的代码和解密工作 现在,它不是 有没有人知道为什么会发生这种情况,或者我如何着手解决它?我想猜测一下,您正在使用

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

解密方法在某一点上起作用,从那以后我再也没有修改过它。我仍在使用与它成功工作时相同的键

我正在使用用于BouncyCastle的PGPEncrypt、PGPDecrypt和PGPEncryptionKeys类,可在此处找到:

此外,我还修改了代码,如下所示:

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

现在,它不是


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

我想猜测一下,您正在使用1024位RSA公钥/私钥,并试图用它加密128字节的内容?如果我是对的,请使用更大的RSA密钥(RSA 4096将允许您加密多达500字节)

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


另外,如果您只是用密钥对“数据”进行加密,则需要确保它不会超出这些限制(RSA 2048为240字节左右,RSA 4096为500字节左右,用于填充)。好的做法和未来的证明是对所有数据实施对称密钥加密,只使用RSA密钥对密钥进行加密/解密。

我猜您使用的是1024位RSA公钥/私钥,并试图用它加密128字节的内容?如果我是对的,请使用更大的RSA密钥(RSA 4096将允许您加密多达500字节)

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


另外,如果您只是用密钥对“数据”进行加密,则需要确保它不会超出这些限制(RSA 2048为240字节左右,RSA 4096为500字节左右,用于填充)。好的做法和未来的证明是对所有数据实施对称密钥加密,只需使用RSA密钥对密钥进行加密/解密。

如果您不打算明确使用PGP过程,您可以在此处使用我的库:


它的“横幅功能”还没有完全激活(创建某种加密档案),但它似乎做了你想要做的一切——它使用ECDHC方案UM1进行密钥派生,并实现了大量的块和流密码。它构建在BouncyCastle之上。

如果您没有明确使用PGP过程,您可以在此处使用我的库:


它的“横幅功能”还没有完全激活(创建某种加密档案),但它似乎做了你想要做的一切——它使用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));
}

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

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

如果你能把你的代码的相关部分发布到这个问题中,会有帮助的。你能做到吗?没有。很抱歉没有输入。因此,在我删除了帖子最后一个链接中的修改后,我发现它对我的本地测试有效,但我仍在等待一组新的测试数据,试图看看那里发生了什么,因为当我在我的第一组测试数据上尝试它时,它起作用了。如果你能将你的代码的相关部分发布到这个问题中,它会有所帮助。你能起作用吗?没有。很抱歉没有输入。因此,在我删除了文章最后一个链接中的修改后,我发现它对我的本地测试有效,但我仍在等待一组新的测试数据,以尝试查看那里发生了什么,因为当我在第一组测试数据上尝试它时,它起了作用。我不理解你关于密钥大小的陈述。1024位RSA公钥可以加密长度高达1024位的数据。现在,通常使用填充物,但仍然。。“我们可以期望有900多个比特的数据被加密。@邓肯·琼斯(DuncanJones)输入错误,多亏了更正——应该是字节。我很难想象128字节对称密钥。AES密钥不大于256位。三重DES密钥是192位…@DuncanJones的意思是完全删除对对称密钥的所有引用,我猜他正在加密128字节的内容,这将解释他的错误和它在不需要填充时的零星功能。@DuncanJones或256+到2048 RSA密钥,等等。错误很明显,我以前在bouncycastle中看到过确切的错误消息,当时我的一位开发人员直接用公钥/私钥对加密字段,而不是用对称密钥加密数据,最终有人插入了500多字节。我不理解你关于密钥大小的说法。1024位RSA公钥可以加密长度高达1024位的数据。现在,通常使用填充物,但仍然。。“我们可以期望有900多个比特的数据被加密。@邓肯·琼斯(DuncanJones)输入错误,多亏了更正——应该是字节。我很难想象128字节对称密钥。AES密钥不大于256位。三重DES密钥是192位…@DuncanJones的意思是完全删除对对称密钥的所有引用,我猜他正在加密128字节的内容,这将解释他的错误和它在不需要填充时的零星功能。@DuncanJones或256+到2048 RSA密钥,等等。错误很明显,我以前在bouncycastle中看到过确切的错误消息,当时我的一位开发人员直接用公钥/私钥对加密字段,而不是用对称密钥加密数据,最终有人将500多个字节塞进了。嗨,Obaid,