本帖最后由 GongZiXiaoBai_ 于 2011-07-22 09:14:33 编辑

解决方案 »

  1.   

    如果用 byte[]转会不会好一点。?这代码够可以了啊 还要怎样啊
      

  2.   

    我改了一下,用StringBuffer,只用5行即可。
    public class StringUtils {
        
        private static final int key = 10;     public static String encrypt(String input)
        {
            String output = "";
            char[] in = input.toCharArray();
            int len = in.length;
            char[] out = new char[len];
            int i = 0;
            for(char ch : in)
            {
                ch = (char)(ch^key);
                out[i] = ch;
                i ++ ;
            }
            output = new String(out);
            return output;
        }
      // here :  less line,使用StringBuffer来完成
        public static String encrypt1(String input)
        {
            StringBuffer sb = new StringBuffer();
            for (int i = 0, len = input.length(); i < len; i ++){
             sb.append((char) (input.charAt(i)^key));
            }
            return sb.toString();
        }
        
        public static void main(String[] args) {
            String str = "randy";
            System.out.println("=============before : " + str);
            str = encrypt(str);
            System.out.println("=============after : " + str);
            str = encrypt(str);
            System.out.println("=============third : " + str);
     
            System.out.println("=============before : " + str);
            str = encrypt1(str);
            System.out.println("=============after : " + str);
            str = encrypt1(str);
            System.out.println("=============third : " + str);
        }
    }
      

  3.   

    为了提升性能(这个程序是单线程),可以再将StringBuffer改为StringBuilder
    StringBuffer:线程安全
    StringBuilder:线程不安全
    保证线程安全需要付出额外开销
      

  4.   

    本人博客有
    是MD5加密  lz可以研究一下:
    太长  没法发出来
      

  5.   

    高级语言的话,由于每个字节是一样的,于是你可以转为整数处理,即并行化优化
    public class StringUtils {
        
        //private static final int key = 10; 
        // 生成整形的key,四个字节,10==0x0a
        private static final int key = 0x0a0a0a0a; 
        public static String encrypt(String input)
        {
            String output = "";
            char[] in = input.toCharArray();
            int len = in.length;
            char[] out = new char[len];
            int i = 0;
            //for(char ch : in)
           // {
           //     ch = (char)(ch^key);
            //    out[i] = ch;
            //    i ++ ;
           // }
           // 这里我使用的C的网格,JAVA的实现参照改写就成
           int* in_int = (int *)in;
           int* out_int = (int *)out;
            // 一次处理4个字节
            for(int i=0; i<len-4; i+=4)
                  out_int[i] ^= in_int[i];
            // 处理4的余数个字节
            while(i < len)
               out[i] ^= int[i];
            output = new String(out);
            return output;
        }
        
        public static void main(String[] args) {
            String str = "";
            System.out.println("=============before : " + str);
            str = encrypt(str);
            System.out.println("=============after : " + str);
            str = encrypt(str);
            System.out.println("=============third : " + str);
        }}
      

  6.   


    md5根本就不是加密技术,是信息摘要技术,md5的结果是不可逆的,楼主很明显是要的可逆算法。
      

  7.   

    给你优化了一下,用了另外一种for循环无需额外控制数组下标,另外去掉了一些没必要的中间变量
        public static String encrypt(String input)
        {
            char[] in = input.toCharArray();
            char[] out = new char[in.length];
            for (int i=0; i<in.length; i++)
             out[i] = (char)(in[i]^key);
            return new String(out);
        }
      

  8.   

    另外,楼主的做法是直接从一个固定长度的char[]生成出一个字符串,并未涉及到字符串加法,所以其执行效率反而比StringBuffer或StringBuilder要高。
      

  9.   

    进一步的优化:
    1) String对象已经内置了一个char数组,因此char[] in = input.toCharArray();增加了多余的分配内存、赋值数据的时间,也导致代码多了一行。
    2) 如果入口参数input是null,方法会报异常。
    针对这两点做进一步优化后代码如下:
        public static String encrypt(String input) {
         if (input==null) return null; //消除了空指针异常隐患
            char[] out = new char[input.length()];
            for (int i=0; i<out.length; i++)
                out[i] = (char)(input.charAt(i)^key); //用String.charAt()直接取第i个char
            return new String(out);
        }
      

  10.   


        public static String encrypt(String input)
        {
            char[] in = input.toCharArray();
            StringBuilder sb = new StringBuilder("");
            for (char c:in)
                sb.append((char)(c^key));
            return new String(sb);
        }
    看了所有评论,如此呢?