1

好的,所以我有一个 Visual Basic 6 应用程序,我假设它适用于 Cp1252 编码(他们不会更改它,所以我猜这是默认设置)它执行以下操作

Java中的等效代码:

            String key = "THEKEY";
            int x = 1;
            int asciiVal, asciiKey, asciiTot;       
            for(int i = 0; i < frase.length(); i++){
                asciiVal = (int)frase.charAt(i);
                asciiKey = (int)key.charAt(x-1);
                x += x;
                if(x > key.length()){
                    x = 1;
                }       
                asciiTot = asciiVal + asciiKey;

                if(asciiTot > 255)
                    asciiTot -= 255;

                resultado = resultado + new String(Character.toChars(asciiTot));            
            }

frase 是被编码的字符串。现在,我确信这段代码是等效的,因为我已经在 VB 应用程序中测试了我的结果,并且它做同样的事情。

解密方法如下所示:

            String key = "THEKEY";
            int x = 1;
            int asciiVal, asciiKey, asciiTot;       
            for(int i = 0; i < frase.length(); i++){
                asciiVal = (int)frase.charAt(i);    
                asciiKey = (int)key.charAt(x-1);                
                x += x;
                if(x > key.length()){
                    x = 1;
                }
                asciiTot = asciiVal - asciiKey;

                if(asciiTot < 0)
                    asciiTot += 255;                
                resultado = resultado + new String(Character.toChars(asciiTot));            
            }       

此方法在针对 VB6 应用程序的测试中也测试为阳性。

所以现在事情是这样的,VB 应用程序抓取一个字符串对其进行加密并将其保存在目标列位于 Modern_Spanish_CI_AS 中的 MSSQL 数据库中。所以我假设字符串经历了以下

CP1252 在进入数据库时​​转换为 ISO-8859-1。

我的 Java 应用程序以 UTF-8 编码工作,因此我执行了以下操作来检索列

        String frase = new String(rs.getString("FoliosTOTALES_Libres").getBytes("Cp1252"), "ISO-8859-1");

然而,这个字符串在被解密后并没有完全按照它应该得到的结果(某些字符丢失)。当我从数据库接收到字符串时,我已经让 Java 应用程序给了我一个字符串的 ASCII 数组,并且几个 ascii 值超出了 255 范围(这不应该发生),这就是我责怪编码的原因,但我没有不知道我哪里出错了。

4

0 回答 0