即使Kleopatra工作,也会抛出BouncyCastle.Crypto.DataLengthException

时间:2019-06-26 13:35:41

标签: c# .net cryptography bouncycastle pgp

我必须解密一个已签名的文件。我包括了BouncyCastle NuGet程序包,并从https://github.com/bcgit/bc-csharp/blob/master/crypto/test/src/openpgp/examples复制了必要的方法。 但是,Bouncy Castle没有提供有关如何解密签名文件的示例,因此我发现了https://github.com/mattosaurus/PgpCore/。虽然由于需要依赖,我不能将PgpCore用作NuGet,所以我只复制了必要的方法,即DecryptFileAndVerify,EncryptFileAndSign以及所有这些依赖的方法和类。

但是在解密文件时,我得到了一个BouncyCastle.Crypto.DataLengthException消息,消息为“试图将消息处理得很长,需要加密”。但是消息只有16个字节长。

我尝试使用相同的github repos方法对签名文件进行加密,而Kleopatra将其识别为正确的签名加密文件。 Kleopatra还可以正确解密和验证我的代码无法执行的同一文件。

StackTrace是:

   w Org.BouncyCastle.Crypto.BufferedAsymmetricBlockCipher.ProcessBytes(Byte[] input, Int32 inOff, Int32 length)
   w Org.BouncyCastle.Bcpg.OpenPgp.PgpPublicKeyEncryptedData.RecoverSessionData(PgpPrivateKey privKey)
   w Org.BouncyCastle.Bcpg.OpenPgp.PgpPublicKeyEncryptedData.GetDataStream(PgpPrivateKey privKey)
   w MyProject.Services.Crypto.Utilities.GetClearDataStream(PgpPrivateKey privateKey, PgpPublicKeyEncryptedData publicKeyED) w d:\projects\MyProject\Services\Crypto\Utilities.cs:wiersz 547
   w MyProject.Services.Crypto.Utilities.GetClearCompressedMessage(PgpPublicKeyEncryptedData publicKeyED, EncryptionKeys encryptionKeys) w d:\projects\MyProject\Services\Crypto\Utilities.cs:wiersz 538
   w MyProject.Services.Crypto.CryptoProcessorPGP.DecryptAndVerify(Stream inputStream, Stream outputStream, Stream publicKeyStream, Stream privateKeyStream, String passPhrase) w d:\projects\MyProject\Services\Crypto\CryptoProcessorPGP.cs:wiersz 459
   w MyProject.Services.Crypto.CryptoProcessorPGP.DecryptFileAndVerify(String inputFilePath, String outputFilePath, String publicKeyFilePath, String privateKeyFilePath, String passPhrase) w d:\projects\MyProject\Services\Crypto\CryptoProcessorPGP.cs:wiersz 447
   w MyProject.TestRunner.Program.Main(String[] args) w d:\projects\MyProject.TestRunner\Program.cs:wiersz 138

我的函数调用

                    cryptoProcessor.DecryptFileAndVerify(
                        encryptedFilePath,
                        decryptedFilePath,
                        publicKeyPath,
                        privateKeyPath,
                        passPhrase);

使用的方法与https://github.com/mattosaurus/PgpCore/

中的相同

0 个答案:

没有答案