加密密码

package jp.co.smile.common;

import java.io.IOException;
import java.security.*;

/***
* 作者:焦绪进
* 日期:20060804
* 说明:采用摘要算法,由于摘要算法不可逆,所以不容易破解
* 请使用encrypt()方法加密数据,该方法返回加密后的数据
* 然后将该数据存入数据库,字段长度至少>8 (尽量要长些)
* 方法checkDataSame()验证普通字符串是否与加密字符串“相等”
* 请自行删除“测试”的代码及方法
*/
public class PwdCheck {

/**
* 参数:String strPwd 参数为待加密的数据
* 功能:加密数据
* 说明:采用摘要算法,由于摘要算法不可逆,所以不容易破解
* */
public String encrypt(String strPwd) {

try {
//摘要算法SHA-1
java.security.MessageDigest alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(strPwd.getBytes());

byte[] digesta=alga.digest();

return byte2hex(digesta);

} catch (java.security.NoSuchAlgorithmException ex) {

System.out.println("非法摘要算法");
return "加密出错";
}

}

/**
* 参数:strPwdDB 为从数据库取出来的已加密字符串
* 参数:strPwdInput 为从页面取来的用户输入的字符串
* 说明:两字符串相等返回true,否则返回false
* */
public boolean checkDataSame(String strPwdDB, String strPwdInput) {

try {

java.security.MessageDigest algb=java.security.MessageDigest.getInstance("SHA-1");
algb.update(strPwdInput.getBytes());

String parameter2 = byte2hex(algb.digest());

//测试用
System.out.println("你刚才输入的密码已被加密成: " + parameter2);
//测试用
System.out.println("正在验证你输入的密码......");

if (strPwdDB.equals(parameter2)) {
return true;
} else {
return false;
}
} catch (java.security.NoSuchAlgorithmException ex) {
System.out.println("非法摘要算法");
return false;
}
}

/**
*二进制转字符串
*把二进制数组转换成十六进制串,用:号隔开
*一个字节(8位)对应于一个两位的十六进制数
*/
public String byte2hex(byte[] b) {

String hs="";
String stmp="";

for (int n=0;n<b.length;n++) {

stmp=(java.lang.Integer.toHexString(b[n] & 0XFF));

if (stmp.length()==1) hs=hs+"0"+stmp;

else hs=hs+stmp;

if (n<b.length-1) hs=hs+":";

}

return hs.toUpperCase();
}

/**
* 该方法为测试用
* */
public static void main(String[] args) {

byte[] yourInput = new byte[16];
PwdCheck my = new PwdCheck();
//请输入“这是被加密的数据”与“数据库”中的数据进行比较
String getDataFromDB = my.encrypt("这是被加密的数据");

System.out.println("从数据库取得的加密数据为: " + getDataFromDB);
System.out.println("请输入密码: ");

try {

System.in.read(yourInput, 0, 16);
} catch (IOException e) {
e.printStackTrace();
}

System.out.println("你刚才输入的密码是: " + new String(yourInput));

//验证密码的有效性
if (my.checkDataSame(getDataFromDB, new String(yourInput))) {
System.out.println("密码正确!");
} else {
System.out.println("你输入的密码不正确!");
}
}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值