我改了一下,用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(); }
给你优化了一下,用了另外一种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); }
进一步的优化: 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); }
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); } 看了所有评论,如此呢?
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);
}
}
StringBuffer:线程安全
StringBuilder:线程不安全
保证线程安全需要付出额外开销
是MD5加密 lz可以研究一下:
太长 没法发出来
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);
}}
md5根本就不是加密技术,是信息摘要技术,md5的结果是不可逆的,楼主很明显是要的可逆算法。
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);
}
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);
}
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);
}
看了所有评论,如此呢?