- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 bouncy caSTLe pgp 和 bouncy-gpg ( https://github.com/neuhalje/bouncy-gpg ),我想做非常简单的事情:
ByteArrayOutputStream cryptoBytes = new ByteArrayOutputStream();
try {
final OutputStream outputStream = BouncyGPG
.encryptToStream()
.withConfig(keyringConfig)
.withStrongAlgorithms()
.toRecipient(recipient)
.andDoNotSign()
.binaryOutput()
.andWriteTo(cryptoBytes);
Streams.pipeAll(input, outputStream);
outputStream.flush();
} catch (Exception e) {
e.printStackTrace();
}
ByteArrayOutputStream plainBytes = new ByteArrayOutputStream();
try {
final InputStream plaintextStream = BouncyGPG
.decryptAndVerifyStream()
.withConfig(keyringConfig)
.andIgnoreSignatures()
.fromEncryptedInputStream(new ByteArrayInputStream(cryptoBytes.toByteArray()));
Streams.pipeAll(plaintextStream, plainBytes);
} catch (Exception e) {
e.printStackTrace();
}
但是我在尝试解密时遇到异常:
java.io.EOFException: premature end of stream in PartialInputStream
at org.bouncycastle.bcpg.BCPGInputStream$PartialInputStream.read(Unknown Source)
at org.bouncycastle.bcpg.BCPGInputStream.read(Unknown Source)
at org.bouncycastle.bcpg.SymmetricEncIntegrityPacket.<init>(Unknown Source)
我没有使用任何字符串转换,所以我无法理解为什么字节数组长度存在问题
最佳答案
事实上,您必须关闭OutputStream
。原因是GPG将签名写在流的末尾。这是通过关闭流来触发的。
try {
final OutputStream outputStream = BouncyGPG
.encryptToStream()
.withConfig(keyringConfig)
.withStrongAlgorithms()
.toRecipient(recipient)
.andDoNotSign()
.binaryOutput()
.andWriteTo(cryptoBytes);
Streams.pipeAll(input, outputStream);
outputStream.close(); // <<<----
} catch (Exception e) {
e.printStackTrace();
}
example在自述文件中使用了“try-with-resources”,它会自动关闭流。我澄清了项目中的 README,以使这一点更加清晰。
关于java - bouncy caSTLe pgp - PartialInputStream 中的流过早结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48870074/
我有一个 javascript 函数,可以执行以下操作; 它将日期编辑框设置为与另一个日期编辑相同的日期。但是我希望它将 txt_Testin
我有一个输入框,类型为“时间”。我想将迟到时间 (23:00pm) 作为最小值,将早期时间 (6:00am) 作为最大值 - 创建一个 23pm - 6am 的范围。 (即中午 11 点、中午 12
使用 Joda 时间并获得类似以下行为的最简单方法是什么: public boolean check( DateTime checkTime ) { DateTime someTime = n
我想计算 updated_at 比 created_at 早 2 小时的记录。 代码 $teLang = $kentekens->where('updated_at', '>', 'created_a
我是一名优秀的程序员,十分优秀!