CJK腐败,sqlite3

时间:2012-09-14 14:05:40

标签: unicode sqlite cjk utf

这两种方法用于加密/解密数据库内容:

public String encrypt(String str) {
    try {
        // Encode the string into bytes using utf-8
        byte[] utf8 = str.getBytes("UTF8");

        // Encrypt
        byte[] enc = ecipher.doFinal(utf8);

        // Encode bytes to base64 to get a string
        return Base64.encodeToString(enc, Base64.NO_WRAP);

    } catch (javax.crypto.BadPaddingException e) {
    } catch (IllegalBlockSizeException e) {
    } catch (UnsupportedEncodingException e) {
    }
    return null;
}

public String decrypt(String str) {
    try {
        // Decode base64 to get bytes
        byte[] dec = Base64.decode(str, Base64.NO_WRAP);

        // Decrypt
        byte[] utf8 = dcipher.doFinal(dec);

        // Decode using utf-8
        return new String(utf8, "UTF8");
    } catch (javax.crypto.BadPaddingException e) {
    } catch (IllegalBlockSizeException e) {
    } catch (UnsupportedEncodingException e) {
    }
    return null;
}

我手动检查过加密/解密的原始字节数组是否相同,但不知何故,CJK字符串设法损坏。例如,韩语“유료컨텐츠는63”被混淆为enter image description here。我只能想到原文中的空格字符搞砸了所有东西......但这听起来很愚蠢。在Android设备和SQlite浏览器UI上观察到相同的乱码。我整天都在使用UTF 8/16,并不认为这与手头的问题有关。这个混乱的结果看起来仍然是韩国人的眼睛......有什么提示吗?

编辑:这是两种方法中utf8字节数组的样子:

[0] -61 [195] [0xc3]    
[1] -126 [130] [0x82]   
[2] -27 [229] [0xe5]    
[3] -116 [140] [0x8c]   
[4] -125 [131] [0x83]   
[5] -24 [232] [0xe8]    
[6] -127 [129] [0x81]   
[7] -124 [132] [0x84]   
[8] -29 [227] [0xe3]    
[9] -66 [190] [0xbe]    
[10]    -103 [153] [0x99]   
[11]    -26 [230] [0xe6]    
[12]    -108 [148] [0x94]   
[13]    -96 [160] [0xa0]    
[14]    54 [0x36]   
[15]    51 [0x33]

0 个答案:

没有答案