我正在尝试以给定的时间间隔向服务器写SFTP服务,下载目录中的所有文件,然后解密它们以进行处理。
解密方法在某一点上工作,我从未修改过它。我仍然使用与成功工作时相同的密钥。
我在这里找到了BouncyCastle的PGPEncrypt,PGPDecrypt和PGPEncryptionKeys类:https://github.com/sledwith/PGP-Decryption-With-C-Sharp
此外,我修改了代码,如下所示:Exception on decrypting file using BouncyCastle PGP
如果您注意到,我评论了修复我的代码和解密是如何工作的。
现在,事实并非如此。
有没有人知道为什么会发生这种情况,或者我如何解决这个问题?
答案 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));
}