我们已经为Cassandra DSE中的所有表实现了TDE。我们使用AES / ECB / PKCS5Padding / 128作为密码算法生成系统密钥。
我们还为几个需要cdc捕获的表启用了cdc。由于为表启用了TDE,因此cdc日志也会被加密。
我们需要将cdc捕获推送到kafka主题。我们尝试使用system_key文件中生成的system_key自动解密文件。
AES / ECB / PKCS5Padding:128:(key)的
但是我们得到java.security.InvalidKeyException:非法密钥大小或默认参数
请告知是否密钥可用于解密cdc日志或建议任何解决方案。
以下是我们用于解密的代码段。
public class EncryptDecrypt {
public static String encrypt(String input, String key) {
byte[] crypted = null;
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
} catch (Exception e) {
System.out.println(e.toString());
}
java.util.Base64.Encoder encoder = java.util.Base64.getEncoder();
return new String(encoder.encodeToString(crypted));
}
public static String decrypt(String input, String key) {
byte[] output = null;
try {
java.util.Base64.Decoder decoder = java.util.Base64.getDecoder();
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
output = cipher.doFinal(decoder.decode(input));
} catch (Exception e) {
System.out.println(e.toString());
}
return new String(output);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String key = "qhk9gDtvTUlLW9dnh/UMaw==";
String data = "ABC";
System.out.println(EncryptDecrypt.encrypt(data, key));
System.out.println(EncryptDecrypt.decrypt(EncryptDecrypt.encrypt(data, key), key));
}
}
答案 0 :(得分:0)
system_key
文件不用于直接加密数据,而是用于加密存储在dse_system.encrypted_keys
中的实际加密密钥。为算法/强度的每个组合生成这些键。有关详细信息,请参阅documentation。