1

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

解密方法在某一时刻有效,从那以后我没有修改过它。我仍然使用与成功工作时相同的密钥。

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

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

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

现在,它不是。

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

4

3 回答 3

2

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

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

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

于 2013-10-01T19:43:19.043 回答
0

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

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

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

于 2013-10-06T23:02:05.187 回答
-1

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

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));
}
于 2015-04-21T07:42:43.660 回答