當我創建了加密輸出到一個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