最近在做一项目,由于原项目是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;
}
我想这里应该是:
binary = Integer.toBinaryString(byt[k]);
另外
bit = (char) bin;
bit是String,bin是int,把int强转成char赋值给String?OTL
用String类提供的方法转吧:
bit = String.valueOf(bin);
bin = byt[k] & 0xFF; if (bin > 128) {
k++;
}
如果是取反码的话,用位运算就可以了,哪用这么大动干戈,但是我看到上面那段代码后,又怀疑可能没那么简单,你最好先把算法搞搞清楚再研究程序怎么写。