首先你要明确
x^=y; y^=x; x^=y;与 temp=x;x=y;y=temp起相同
的作用x,y互换值,但不用中间变量将密码放进一个char数组,
然后对String中每个char与相对应的char进行异或运算存为密文,若密码中的char用完再循环使用,
解密时对密文中的每个char重新与相对应的密码中的char异或运算,得到原文
不过这样的算法有一个坏处,当原文有2个字符,而密码8位时,后6位密码就实效了,也就是后6位无论你输入什么,都可解出原文
x^=y; y^=x; x^=y;与 temp=x;x=y;y=temp起相同
的作用x,y互换值,但不用中间变量将密码放进一个char数组,
然后对String中每个char与相对应的char进行异或运算存为密文,若密码中的char用完再循环使用,
解密时对密文中的每个char重新与相对应的密码中的char异或运算,得到原文
不过这样的算法有一个坏处,当原文有2个字符,而密码8位时,后6位密码就实效了,也就是后6位无论你输入什么,都可解出原文
public static void main(String[] args){
String s=encode("My name is shine333", "sadfdk");
System.out.println(s);
System.out.println(decode(s,"mjc@2000"));
}
public static String encode(String txt, String password){
char[] pwd=password.toCharArray();
StringBuffer buf=new StringBuffer();
for(int i=0;i<txt.length();i++){
buf.append((char)(pwd[i%pwd.length]^txt.charAt(i)));
}
return buf.toString();
} public static String decode(String txt, String password){
char[] pwd=password.toCharArray();
StringBuffer buf=new StringBuffer();
for(int i=0;i<txt.length();i++){
buf.append((char)(txt.charAt(i)^pwd[i%pwd.length]));
}
return buf.toString();
}
}
而且加密字串的字符要是1~0,A~Z。就像一些軟件的注冊機算法一樣,輸入用戶名,產生一個SN。