我有一個遺留系統使用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;}
什麼是系統默認的編碼?什麼是'dCipher'? – Thomas
可能是lineSeparator問題?因爲它對於Windows和Linux是不同的...... – Maxim
這兩個系統都是UTF8 –