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

本文介绍了一种使用Java实现的简易加密与解密方法。该方法通过选取两个随机字符作为加密种子,并结合输入密码生成新的字符串。加密过程涉及字符在预定义字符集中的位置运算,确保了数据的安全性与可逆性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     看到一个用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"));
}
----

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值