我正在创建一个客户端应用程序,它需要创建用户活动的日志,但由于各种原因,此日志必须是人类可读的.
目前,对于我的开发,我正在创建一个纯文本日志,如下所示:
12/03/2009 08:34:21 - >用户'Bob'登录于12/03/2009 08:34:28 - >导航到配置页面12/03/2009 08:34:32 - >选项x改为ÿ
部署应用程序时,日志不能是纯文本,因此所有文本都必须加密.这看起来并不简单,因为我需要在添加每个条目时动态更新日志文件.我想到的方法是创建一个二进制文件,隔离加密每个日志条目,然后将它附加到二进制文件,每个条目之间有一些合适的分界.
有谁知道这个问题的任何常见方法,我相信必须有一个更好的解决方案!
不要单独加密单个日志条目,并按照其他海报的建议将其写入文件,因为攻击者可以轻松识别日志文件中的模式.请参阅块密码模式Wikipedia条目以了解有关此问题的更多信息.
相反,请确保日志条目的加密取决于以前的日志条目.虽然这有一些缺点(你不能解密单个日志条目,因为你总是需要解密整个文件),但它使加密更加强大.对于我们自己的日志记录库SmartInspect,我们使用AES加密和CBC模式来避免模式问题.随时给SmartInspect一个尝试,如果一个商业解决方案将是合适的.
FWIW,有一次我需要一个加密的记录器,我使用对称密钥(出于性能原因)加密实际的日志条目.
然后,对称的"日志文件密钥"在公钥下加密并存储在日志文件的开头,并且单独的日志阅读器使用私钥来解密"日志文件密钥"并读取条目.
整个过程是使用log4j和XML日志文件格式实现的(为了使读者更容易解析),每次日志文件都滚动到一个新的"日志文件密钥"时生成.