java中,右移位的时候,结果应该+1才对,做移位的时候-1!!!我强两天还写过这样的程序,原来的加密算法移植到java!当时也碰到很多问题!建议你跟踪一下,看看内存中的具体数据,然后再修改!!!

解决方案 »

  1.   

    to zhang21cnboy(事了抚衣去,不留身与名) 
    请问怎么+1啊?
    是不是这样:c  =  c  ^  ((key  >>=  8) + 1);  
    能不能帮我改写成java程序,改写对了我再给你加50分。
      

  2.   

    能不能帮我将以上的加密算法移植到java,改写对了我再给你加50分。
      

  3.   

    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);
        }
    }
      

  4.   

    to fast_time(fast_time) :
    在delphi中通过MS.Read(C,  1); 这行代码读出的存放在C中的值与
    c = in.read()这行代码读出的存放在c中的值不一样,该怎么办呢?
    我考虑了很多种情况,但是还是没有解决。
      

  5.   

    当然不一样
    Delphi中是按照字节读出来的
    Java中是按照Unicode编码读出来的
    你可以考虑用byte来读,Key用short
      

  6.   

    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中的值
    不一样,该怎么办呢?
      

  7.   

    这个用delphi写的加密算法不是我写的,
    但是我必须将它移植到java中来应用。
      

  8.   

    Java和Delphi中的机制不一样吧
    结果出来了,为什么还要保证c一致??
    这也是结果吗??
      

  9.   

    Java中取得的是Unicode码
    Delphi好像不是吧
      

  10.   

    是这样:
    将文件在delphi的应用程序中加密后,将加密过的文件,再到java应用中进行解密,
    如果在delphi中通过MS.Read(C,  1); 这行代码读出的存放在C中的值与
    c = in.read()这行代码读出的存放在c中的值不一样,
    那怎么能正确地进行解密呢?
      

  11.   

    假设文件为test.txt,其中存放的内容为1234567890
    在delphi中进行调试,读取第一个字节的值为249,
    而在java中进行调试,读取第一个字节的值为49,此值为数字1的ASCII码的值。
      

  12.   

    我也不清楚,我觉得问题就出在delphi读取出来的值,
    而不是java中的移位问题。
    要是delphi读取出来的值是字节就好办了。
    郁闷..............................................
      

  13.   

    不信的话,你可以将以上delphi程序在delphi中调试以下吗?
    至于为什么,我也很郁闷..............................................
      

  14.   

    这个问题的确有点难度,我看太兄也没法解决。
    这样吧,我结贴算了,这里的分全部给你,也算对你的参与表示感谢。
    如果你能解决最好,解决了给我发eMail:[email protected],解决了我会给你加分100的。
    我不会食言我的那句“谁解决这个问题,就给谁加100分”。
      

  15.   

    你把你用Delphi生成的aa.aa文件给我发一份
    [email protected]
      

  16.   

    我已经发过来了。
    test.txt是原文件,aa.txt是加密过的文件。