我有一個MS-Access數據庫,裏面有加密的字符串。這些看起來是這樣的: Jackcess:MSAccess數據庫的錯誤字符集
但是,我很快注意到,這些字符串的長度恰好匹配明文的長度(我知道明文)。因此,通過對Excel的一些嘗試,我發現如果您使用=CODE(<char>)
-函數(因此您可以在默認字符集中獲得字符代碼,並且反之亦然),並且將該數字與該字母的字符代碼進行異或運算應代表你總是得到相同的結果。這意味着我只需要用java和瞧這些值創建一個數組。的Excel示例(在右側所提到的 「陣列」): 實施例: 「>>」 具有(DEC)187的索引,所以187xor253產生70 => 「F」
現在,我使用jackcess到訪問這些值和「解密」大多是好的,但我有時從字符串中得到錯誤的字符。在Excel中,一切正常。代碼與最好的結果:
public static final int[] DECRYPT_KEY = { 253, 203, 204, 217, 226, 205, 128, 201, 222, 183, 58, 217, 230, 201, 183, 211, 158, 203, 167, 213, 35, 33, 201, 123, 186, 247 };
public static void main(String[] args) throws IOException
{
System.out.println(System.getProperty("file.encoding"));
Database db = DatabaseBuilder.open(new File("/home/***/TM.db"));
Table table = db.getTable("personal");
for (Row row : table)
{
String vorname = row.getString("vorname");
byte[] vornameArr = vorname.getBytes("cp1252");
for (int i1 = 0; i1 < vornameArr.length; i1++)
{
vornameArr[i1] = (byte) ((vornameArr[i1] & 0xff)^DECRYPT_KEY[i1]);
}
System.out.println(new String(vornameArr, "cp1252"));
}
}
但正如我所說,一些字符仍然是錯誤的,但在Excel中,但一切都很好。當我打印getBytes("cp1272")
給出的數字時,它與Excel完全不同。
你有什麼想法,我可能做錯了什麼,爲什麼java有時會給出與Excel不同的值?什麼是更好的方法?我已經嘗試過所有的字符集組合,有些工作在其他人失敗的地方,但之後出現了其他錯誤的結果。
嗯....奇怪。只是爲了它,試試「windows-1252」。 「cp1252」是用於java.io API和java.lang API的規範名稱,「windows-1253」是用於java.nio API的規範名稱。 – DevilsHnd
不,可悲的是它沒有幫助。上面顯示的名稱「Fadima」導致「FadiÝa」。這是唯一的一個,所有其他都很好 – TheFreddy1404