如何将Delphi中的加密解密程序改写java的加密解密程序?(源代码奉献,问题解决分可以再加) java中,右移位的时候,结果应该+1才对,做移位的时候-1!!!我强两天还写过这样的程序,原来的加密算法移植到java!当时也碰到很多问题!建议你跟踪一下,看看内存中的具体数据,然后再修改!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 to zhang21cnboy(事了抚衣去,不留身与名) 请问怎么+1啊?是不是这样:c = c ^ ((key >>= 8) + 1); 能不能帮我改写成java程序,改写对了我再给你加50分。 能不能帮我将以上的加密算法移植到java,改写对了我再给你加50分。 import java.io.*;public class JSSJ { final private int C1 = 50000; final private int C2 = 30000; public JSSJ() { } public void encryptFile(String inputFileName, String outFileName, int key) { int c; try { FileInputStream in = new FileInputStream(new File(inputFileName)); FileOutputStream out = new FileOutputStream(new File(outFileName)); while ((c = in.read()) != -1) { c = c ^ (key >> 32); key = (c + key) * C1 + C2; out.write(c); } in.close(); out.close(); } catch (FileNotFoundException fnfEx) { } catch (IOException ioEx) { } } public void decryptFile(String inputFileName, String outFileName, int key) { int c, o; try { FileInputStream in = new FileInputStream(new File(inputFileName)); FileOutputStream out = new FileOutputStream(new File(outFileName)); while ((c = in.read()) != -1) { o = c; c = c ^ (key >> 32); key = (o + key) * C1 + C2; out.write(c); } } catch (FileNotFoundException fnfEx) { } catch (IOException ioEx) { } } //?? public static void main(String[] args) { JSSJ JSSJ1 = new JSSJ(); JSSJ1.encryptFile("c:\\Tel.txt", "c:\\aa.aa", Integer.MAX_VALUE); JSSJ1.decryptFile("c:\\aa.aa", "c:\\test2.txt", Integer.MAX_VALUE); }} to fast_time(fast_time) :在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值与c = in.read()这行代码读出的存放在c中的值不一样,该怎么办呢?我考虑了很多种情况,但是还是没有解决。 当然不一样Delphi中是按照字节读出来的Java中是按照Unicode编码读出来的你可以考虑用byte来读,Key用short to fast_time(fast_time) :可是我改成如下:byte[] b = new byte[num];in.read(b);for (int j = 0; j < num; j++) { temp = b[j];}进行调试时,temp的值还是和在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值不一样,该怎么办呢? 这个用delphi写的加密算法不是我写的,但是我必须将它移植到java中来应用。 Java和Delphi中的机制不一样吧结果出来了,为什么还要保证c一致??这也是结果吗?? Java中取得的是Unicode码Delphi好像不是吧 是这样:将文件在delphi的应用程序中加密后,将加密过的文件,再到java应用中进行解密,如果在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值与c = in.read()这行代码读出的存放在c中的值不一样,那怎么能正确地进行解密呢? 假设文件为test.txt,其中存放的内容为1234567890在delphi中进行调试,读取第一个字节的值为249,而在java中进行调试,读取第一个字节的值为49,此值为数字1的ASCII码的值。 我也不清楚,我觉得问题就出在delphi读取出来的值,而不是java中的移位问题。要是delphi读取出来的值是字节就好办了。郁闷.............................................. 不信的话,你可以将以上delphi程序在delphi中调试以下吗?至于为什么,我也很郁闷.............................................. 这个问题的确有点难度,我看太兄也没法解决。这样吧,我结贴算了,这里的分全部给你,也算对你的参与表示感谢。如果你能解决最好,解决了给我发eMail:[email protected],解决了我会给你加分100的。我不会食言我的那句“谁解决这个问题,就给谁加100分”。 你把你用Delphi生成的aa.aa文件给我发一份[email protected] 我已经发过来了。test.txt是原文件,aa.txt是加密过的文件。 java的system.out.println的问题 请教关于读TXT档 抓字串 计算次数 写出TXT档 处理list问题 java编程关于character的小问题 JAVA实现万年历功能 都说java开发的界面程序很慢,能慢到哪里呀?是与别的工具开发的有天嚷之别吗? 写收邮件的程序,swing上碰到一点问题 急急急!!!! 在WEB服务器上发布含有applet的html时,遇见的问题,在线等 【Java】关于数组/字符串结束符的疑问…… java新手,编程时出了点错误,求大牛帮忙看看哪儿错了 关于io的小问题,请指点 replaceALL的怪问题!
请问怎么+1啊?
是不是这样:c = c ^ ((key >>= 8) + 1);
能不能帮我改写成java程序,改写对了我再给你加50分。
final private int C1 = 50000;
final private int C2 = 30000; public JSSJ() {
} public void encryptFile(String inputFileName, String outFileName, int key) {
int c;
try {
FileInputStream in = new FileInputStream(new File(inputFileName));
FileOutputStream out = new FileOutputStream(new File(outFileName)); while ((c = in.read()) != -1) {
c = c ^ (key >> 32);
key = (c + key) * C1 + C2;
out.write(c);
}
in.close();
out.close();
} catch (FileNotFoundException fnfEx) {
} catch (IOException ioEx) {
}
} public void decryptFile(String inputFileName, String outFileName, int key) {
int c, o;
try {
FileInputStream in = new FileInputStream(new File(inputFileName));
FileOutputStream out = new FileOutputStream(new File(outFileName));
while ((c = in.read()) != -1) {
o = c;
c = c ^ (key >> 32);
key = (o + key) * C1 + C2;
out.write(c);
}
} catch (FileNotFoundException fnfEx) {
} catch (IOException ioEx) {
}
} //??
public static void main(String[] args) {
JSSJ JSSJ1 = new JSSJ();
JSSJ1.encryptFile("c:\\Tel.txt", "c:\\aa.aa", Integer.MAX_VALUE);
JSSJ1.decryptFile("c:\\aa.aa", "c:\\test2.txt", Integer.MAX_VALUE);
}
}
在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值与
c = in.read()这行代码读出的存放在c中的值不一样,该怎么办呢?
我考虑了很多种情况,但是还是没有解决。
Delphi中是按照字节读出来的
Java中是按照Unicode编码读出来的
你可以考虑用byte来读,Key用short
可是我改成如下:
byte[] b = new byte[num];
in.read(b);
for (int j = 0; j < num; j++) {
temp = b[j];
}
进行调试时,temp的值还是和
在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值
不一样,该怎么办呢?
但是我必须将它移植到java中来应用。
结果出来了,为什么还要保证c一致??
这也是结果吗??
Delphi好像不是吧
将文件在delphi的应用程序中加密后,将加密过的文件,再到java应用中进行解密,
如果在delphi中通过MS.Read(C, 1); 这行代码读出的存放在C中的值与
c = in.read()这行代码读出的存放在c中的值不一样,
那怎么能正确地进行解密呢?
在delphi中进行调试,读取第一个字节的值为249,
而在java中进行调试,读取第一个字节的值为49,此值为数字1的ASCII码的值。
而不是java中的移位问题。
要是delphi读取出来的值是字节就好办了。
郁闷..............................................
至于为什么,我也很郁闷..............................................
这样吧,我结贴算了,这里的分全部给你,也算对你的参与表示感谢。
如果你能解决最好,解决了给我发eMail:[email protected],解决了我会给你加分100的。
我不会食言我的那句“谁解决这个问题,就给谁加100分”。
[email protected]
test.txt是原文件,aa.txt是加密过的文件。