我有一个遗留系统使用hibernate拦截器对某些数据库表上的某些字段进行加密(和编码)和解密(以及解码)。它使用OnSave,OnLoad和OnFlushDirty方法。这个代码在从这个系统读取数据时变成错误的,当传送到另一个应用程序时仍然有一些记录被加密和编码(一些被加密了多次)。我面临的挑战是,当接收应用程序在Windows机器上时,我可以执行解密和解码(尽可能多次)。当接收应用程序是一个linux虚拟机时,当我尝试重复同样的事情时,我得到一个BadPaddingException。为什么加密和base64编码文本在Windows和Linux上显示为不同
任何帮助/建议将不胜感激
这里是休眠拦截
public boolean onLoad(Object entity, Serializable arg1, Object[] state, String[] propertyNames, Type[] arg4) throws CallbackException {
if (key != null){
try {
if (entity instanceof BasicData) {
for (int i = 0; i < state.length; i++) {
if (state[i] instanceof String){
String cipherText = (String)state[i];
byte[] cipherTextBytes = Base64Coder.decode(cipherText);
byte[] plainTextBytes = dCipher.doFinal(cipherTextBytes);
state[i] = new String(plainTextBytes, "UTF8");
}
}
return true;
}
} catch (Exception e) {
e.printStackTrace();
}}return false;}
+0
什么是系统默认的编码?什么是'dCipher'? –
+0
可能是lineSeparator问题?因为它对于Windows和Linux是不同的...... –
+0
这两个系统都是UTF8 –