我正在编写某种生成加密日志文件的记录器.不幸的是,密码学不是我的强项.现在我可以写入文件,然后关闭文件.然后我可以打开它,附加一些消息,再次关闭,解密后我看到文件中间的填充字节.有没有办法使用加密文件而不必每次我想附加一些消息时解密它?
编辑:更多细节.当前实现使用CipherOutputStream.据我所知,没有办法寻求使用它.如果我控制输出数据大小可以被块大小整除,我可以使用'NoPadding'选项吗?
我在加密/解密log4j的RollingFileAppender生成的日志文件时遇到问题.对于加密我试图扩展RollingFileAppender,只需将其称为EncryptedRollingFileAppender.我重写了这个方法
setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
Run Code Online (Sandbox Code Playgroud)
基本上我使用CipherOutputStream和Base64OutputStream来加密和编码写入输出流的所有内容.这是代码的一部分:
...
setImmediateFlush(true);
FileOutputStream ostream = null;
CipherOutputStream cstream = null;
Base64OutputStream b64stream = null;
try {
byte[] keyBytes = "1234123412341234".getBytes(); //example
final byte[] ivBytes = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f }; //example
final SecretKey key = new SecretKeySpec(keyBytes, "AES");
final IvParameterSpec IV = new IvParameterSpec(ivBytes);
final Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, key, IV);
ostream = new …Run Code Online (Sandbox Code Playgroud) 我正在制作游戏.我在内部构建了日志记录工具,并且有常规,日志,异常,发送,接收,调试等消息类型.
发送和接收日志包含原始日志记录信息,因此它们实际上包含我通过网络发送的内容.
游戏使用客户端 - 服务器模型并使用SSL连接,以便不能更改网络信息.但是对于日志记录,我将文本记录为纯文本,这显然会带来麻烦.我还计划简单地(通过*)屏蔽任何个人信息(如密码等)
但是我有一些顾虑:
总而言之:我如何仍然记录所有信息并将其写入文件,但没有其他任何人能够以任何方式阅读,修改或使用它?
所有评论都非常感谢,我也很感激如何实施这样一个系统的具体建议.
问候.