我正在尝试使用java BouncyCastle库解密和验证PGP消息,但遇到了问题,抱怨PartialInputStream的过早结束.
我知道加密工作正常,因为我可以在命令行上使用gpg解密和验证使用加密函数创建的消息.
这是代码:
public static void signEncryptMessage(InputStream in, OutputStream out, PGPPublicKey publicKey, PGPPrivateKey secretKey, SecureRandom rand) throws Exception {
out = new ArmoredOutputStream(out);
PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(new BcPGPDataEncryptorBuilder(PGPEncryptedData.AES_256).setWithIntegrityPacket(true).setSecureRandom(rand));
encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(publicKey));
OutputStream compressedOut = new PGPCompressedDataGenerator(PGPCompressedData.ZIP).open(encryptedDataGenerator.open(out, 4096), new byte[4096]);
PGPSignatureGenerator signatureGenerator = new PGPSignatureGenerator(new BcPGPContentSignerBuilder(publicKey.getAlgorithm(), HashAlgorithmTags.SHA512));
signatureGenerator.init(PGPSignature.BINARY_DOCUMENT, secretKey);
signatureGenerator.generateOnePassVersion(true).encode(compressedOut);
OutputStream finalOut = new PGPLiteralDataGenerator().open(compressedOut, PGPLiteralData.BINARY, "", new Date(), new byte[4096]);
byte[] buf = new byte[4096];
int len;
while ((len = in.read(buf)) > 0) {
finalOut.write(buf, 0, len);
signatureGenerator.update(buf, 0, …
Run Code Online (Sandbox Code Playgroud) 我有一种情况,我在右键单击JTable时创建了一个弹出菜单.创建弹出菜单的标准方法:
aJTable.setComponentPopupMenu(rightClickMenu);
Run Code Online (Sandbox Code Playgroud)
之后在注册的操作中,我无法找到右键单击哪个单元格以显示该弹出菜单.
rightClickMenuItem.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
// Work out what cell was right clicked to generate the menu
}
});
Run Code Online (Sandbox Code Playgroud)
关于你如何做到这一点的任何想法?