最近在做一项目,由于原项目是powerbuilder 9.0开发,其中的用户密码的加密与解密,解密是没有问题(原来PB程序所加的密),但是用JAVA去加密与PB加密的实现效果一样,搞了很长时间也搞不定,各位大侠帮我看看。解密程序:
public static String DeCode(String code) { String binary = "", ret = "", bit = "";
int bin, len; byte[] byt = code.getBytes(); for (int k = 0; k < byt.length; k++) {   bit = "";
 
bin = byt[k] & 0xFF;     if (bin > 128) {
k++;
}
binary = Integer.toBinaryString(bin); len = 8 - binary.length(); for (int i = 0; i < len; i++) {
binary = "0" + binary;
} for (int n = 0; n < binary.length(); n++) { if (binary.substring(n, n + 1).equals("0")) {
bit = bit + "1";
} else {
bit = bit + "0";
} } bin = Integer.parseInt(bit, 2);

 

ret = ret + (char)bin;
  } return ret; }
[color=#FF0000]//加密程序[/color] 就是这加密与PB的效果不一样
public static String EnCode(String code) { String binary = "", ret = "", bit = "";
int bin, len; byte[] byt = code.getBytes(); for (int k = 0; k < byt.length; k++) {  
bit = "";
  binary = Integer.toBinaryString(bin); len = 8 - binary.length(); for (int i = 0; i < len; i++) {
binary = "0" + binary;
} for (int n = 0; n < binary.length(); n++) { if (binary.substring(n, n + 1).equals("0")) {
bit = bit + "1";
} else {
bit = bit + "0";
} }

 

bin = Integer.parseInt(bit, 2); //二进制转换为十进制
 
bit = (char)bin;

ret = ret + bit; } return ret;
}

解决方案 »

  1.   

    binary = Integer.toBinaryString(bin);
    我想这里应该是:
    binary = Integer.toBinaryString(byt[k]);
    另外
    bit = (char) bin;
    bit是String,bin是int,把int强转成char赋值给String?OTL
    用String类提供的方法转吧:
    bit = String.valueOf(bin);
      

  2.   

    bit = String.valueOf(bin);这些我都试过了,无法进行转换。
      

  3.   

    我只是给你指出程序上的错误,至于算法你又没有说明,粗看一下貌似仅仅是将每个byte取反码进行加解密,但是看到这行时我又晕了,这是啥啊
    bin = byt[k] & 0xFF; if (bin > 128) {
    k++;
    }
    如果是取反码的话,用位运算就可以了,哪用这么大动干戈,但是我看到上面那段代码后,又怀疑可能没那么简单,你最好先把算法搞搞清楚再研究程序怎么写。
      

  4.   

    关于算法当然搞清楚了呀,不然程序怎么写呀,解密程序当然没有问题,与powerbuilder中的实现效果是一样的,主要是加密程序。