建议和反馈

请填写你的反馈内容

问答 > 密码学 > 问答详情
已解决

创建加密log4j appender时使用的算法10LK

我创建了一个RollingFileAppender,它将输出加密到log4j日志文件。 目前它使用AES / ECB / NoPadding,它工作正常。

以下是我们创建密码的方法

public static Cipher getCipher(boolean encrypt) throws Exception {
    //https://en.wikipedia.org/wiki/Stream_cipher       
    byte[] key = ("sometestkey").getBytes("UTF-8");
    MessageDigest sha = MessageDigest.getInstance("SHA-1");
    key = sha.digest(key);
    key = Arrays.copyOf(key, 16); // use only first 128 bit

    Key k = new SecretKeySpec(key,"AES");
    Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
    if (encrypt) {
        cipher.init(Cipher.ENCRYPT_MODE, k);
    } else {
        cipher.init(Cipher.DECRYPT_MODE, k);
    }
    return cipher;
}

这是我们如何创建appender:

public class EncryptingRollingFileAppender extends RollingFileAppender {
    private CipherOutputStream s;
    private Cipher cipher; 
    public EncryptingRollingFileAppender() {super();}
    public EncryptingRollingFileAppender(Layout layout, String filename, boolean append) throws IOException {super(layout, filename, append);}
    public EncryptingRollingFileAppender(Layout layout, String filename) throws IOException {super(layout, filename);}

    @Override
    protected OutputStreamWriter createWriter(OutputStream outputStream) {
        if (cipher==null) {
            try {
                cipher = DecryptionTools.getCipher(true);
                s = new CipherOutputStream(outputStream, cipher);
            } catch (Throwable t) {
                throw new RuntimeException("failed to initialise encrypting file appender",t);
            }
        }
        OutputStreamWriter out = super.createWriter(s);
        return out;
    }   
}

我们可以使用解密文件

getCipher(假)

创建适当的解密流。

问题是我们的安全团队正在讨论密钥管理问题。 他们不喜欢使用symetric密钥加密,并且更喜欢我们使用密钥对而不是我们必须以某种方式管理的简单密码。

有没有人知道使用密钥对的非填充ECB加密技术,并且适合这种流加密和解密?


2019-12-02
0
请先登陆或注册

redbull2019-12-02

建议使用混合加密和PGP的评论是正确的。
PGP是文件混合加密的事实标准,它是ECB模式AES的更强大的解决方案。

由于PGP的性质,它与现有解决方案的工作方式略有不同。

PGP消息有一个页眉和页脚,因此您需要单独加密每个文件(您不能像使用普通ECB模式加密一样解密单个块)。

看起来你正在使用log4j 1.2, 我已经创建了一个PGP加密RollingFileAppender的工作实现。

要使用该示例,请生成一个armor编码的PGP公钥,运行主类,然后使用任何PGP工具解密该文件(我使用GnuPG创建密钥和解密)。

该示例是针对log4j:log4j:1.2.17构建的log4j:log4j:1.2.17org.bouncycastle:bcpg-jdk15on:1.56


投一票
评论(0)
赞赏(0)

求助中

解决了这个问题,预计可以帮助到

  • 0
  • 1
  • 4
  • 0
  • 7
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励