java加密用户登录密码--不用MD5实现

来源:互联网 发布:ubuntu vim使用 编辑:程序博客网 时间:2024/04/30 07:33

     看到一个用java实现的简单的加密,主要是可以进行相应的解密,方便实现,在实现一些小的项目的时候可以进行应用.主要的思路,首先给定一个字符串,随机取两个字符作为加密元,和输入的密码组成一个新的字符串,头两个字符作为种子,从要加密的字符串第一个字符开始要加密字符在给定字符串中的位置+前2个字符在在给定字符串中的位置+前1个字符在在给定字符串中的字符位置 然后%在给定字符串的长度,对应的位置的字符就是加密后的字符位置p表示加密字符的位置,i表示要加密字符的位.代码如下:

 /**
* 加密的字符范围可以是特殊字符的
*/
public static final String alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz*-_";

/**
* 生成随机的加密字元
* @return
*/
public static final String randomSa(){
int length = alphabet.length();
java.util.Random r = new java.util.Random();
r.setSeed(System.currentTimeMillis());
return "" + alphabet.charAt(r.nextInt(length)) + alphabet.charAt(r.nextInt(length));
}

public static final String crypt(String src){
return crypt(randomSa(),src);
}

public static final String decrypt(String src){
if(src == null || src.length()< 2)
return null;
int j = src.length()-1;
int s = alphabet.length();
StringBuffer result = new StringBuffer();
for( int i = j;i >1; i--){
int p1 = alphabet.indexOf(src.charAt(i));
int p2 = alphabet.indexOf(src.toString().charAt(i-1));
int p3 = alphabet.indexOf(src.toString().charAt(i-2));
int k = 0;
/*解密字符减去前两个字符在字符表中的位置,得到正确字符在字符表中的位置*/
if(p1 < (p2+p3))
k = p1 + s -(p2 + p3)%s;
else
k = p1 - p2 - p3;
result.insert(0, alphabet.charAt(k%s));
}
return result.toString();
}

public static final String crypt(String salt, String original)
{
// wwb -- Should do some sanity checks: salt needs to be 2 chars, in alpha.
if(salt == null || original == null || original.equals(""))
return null;
while(salt.length() < 2)
salt += "A";
int j = original.length();
int s = alphabet.length();
StringBuffer result = new StringBuffer();
result.append(salt);
//int p = 3;
/*头两个字符作为种子,从要加密的字符串第一个字符开始
* 要加密字符在alphabet中的位置+前2个字符在alphabet中的位置+前1个字符在alphabe中的字符位置
* 然后%alphabet的长度,对应的位置的字符就是加密后的字符位置
* p表示加密字符的位置,i表示要加密字符的位置
* */
for(int i = 0,p=3;i < j;i++,p++){
int k = 0;
k = alphabet.indexOf(original.charAt(i)) + alphabet.indexOf(result.toString().charAt(p-3)) + alphabet.indexOf(result.toString().charAt(p-2));
k %= s;
result.append(alphabet.charAt(k));
}
return result.toString();
}

//调用测试

public static void main(String[] args) {
String s="testtest";
System.out.println("自有的加密:"+crypt(s));
System.out.println("jiemi======:"+decrypt("rJn3VLYai6"));
}
----

0 0
原创粉丝点击