我必须解密一个已签名的文件。我包括了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);
中的相同