当我创建了加密输出到一个log4j的日志文件RollingFileAppender进行使用。 目前它使用AES/ECB/NoPadding,它工作正常。什么算法创建加密Log4j追加
下面是我们如何创建密码
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;
}
下面是我们如何创建附加器:
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(假)解密文件
创建一个适当的解密流。
的问题是,我们的安全团队正在讨价还价约密钥管理。 他们不喜欢使用对称密钥加密,并希望我们使用密钥对而不是我们必须以某种方式管理的简单密码。
有谁知道非填充ECB加密技术会使用密钥对,并且适合这种流加密和解密?
您可以使用[混合加密](https://en.wikipedia。org/wiki/Hybrid_cryptosystem)与任何非对称和对称加密算法的组合,但您还有其他问题。加密的消息需要某种标题。你如何区分同一个日志文件中的多条消息? –
你正在写一个配置文件?真? – EJP
@ ArtjomB。你有没有Java中的混合加密的例子。更具体地说,我可以让RC4使用异步密钥对吗? – Richard