gpt4 book ai didi

java - BouncyCasSTLe 加密 - 丢失 "END PGP MESSAGE"

转载 作者:行者123 更新时间:2023-11-30 05:24:24 25 4
gpt4 key购买 nike

我们最近升级了 BouncyCaSTLe .jar 文件以使用最新的可用版本,并一直致力于将它们实现到我们现有的代码中。

在测试加密方法时,我们发现创建的文件缺少“END PGP MESSAGE”结束标记。并且似乎还缺少用于标记签名的尾部加密行。

这是我们对签名输出编写器的实现 - 我们是否缺少签署文件的重要步骤?还是我们的实现方式有问题?

public static void writeSignedOutputStream(PGPKeyPair keyPair, byte[] data, OutputStream outStream, char dataType, String fileName, boolean withArmor)
throws IOException, NoSuchAlgorithmException, NoSuchProviderException, PGPException, SignatureException
{
try{
registerProvider();

if(withArmor)
outStream = new ArmoredOutputStream(outStream);

PGPPrivateKey privateKey = keyPair.getPrivateKey();
PGPPublicKey publicKey = keyPair.getPublicKey();

// Original signature generator
//PGPSignatureGenerator generator = new PGPSignatureGenerator(publicKey.getAlgorithm(), PGPUtil.SHA1, provider.getName());
PGPSignatureGenerator sigGenerator =
new PGPSignatureGenerator(new BcPGPContentSignerBuilder(publicKey.getAlgorithm(), PGPUtil.SHA1));

// Updating for new version of BouncyCastle
//generator.initSign(PGPSignature.BINARY_DOCUMENT, privateKey);
sigGenerator.init(PGPSignature.BINARY_DOCUMENT, privateKey);

for(Iterator i = publicKey.getUserIDs(); i.hasNext(); ){
PGPSignatureSubpacketGenerator subpacketGenerator = new PGPSignatureSubpacketGenerator();
subpacketGenerator.setSignerUserID(false, (String)i.next());
sigGenerator.setHashedSubpackets(subpacketGenerator.generate());
}

BCPGOutputStream bcpgStream = new BCPGOutputStream(outStream);

sigGenerator.generateOnePassVersion(true).encode(bcpgStream);

PGPLiteralDataGenerator dataGenerator = new PGPLiteralDataGenerator(false);
OutputStream dataStream = dataGenerator.open(bcpgStream, dataType, fileName, data.length, new Date());

for(int c = 0; c < data.length; c++){
dataStream.write(data[c]);
sigGenerator.update(data[c]);
}

sigGenerator.generate().encode(bcpgStream);
dataStream.close();
dataGenerator.close();
bcpgStream.close();

}catch(PGPException pe){
//Exception catching
}catch(Exception e){
//Exception Catching
}finally{}
}

这是输出文件的样子[经过加密数据审查]以说明问题 - 我希望在此消息的底部看到“--END PGP MESSAGE--”,但这只是简单的不在那里。

Encrypted file - the expected "--END PGP MESSAGE--" text does not appear at the bottom

最佳答案

我认为您可能遇到问题,因为您没有刷新流,因此未写入一些缓冲数据。
尝试通过调用 outStream.flush()bcpgStream.flush()

刷新输出流

关于java - BouncyCasSTLe 加密 - 丢失 "END PGP MESSAGE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58957786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com