Bootstrap

用户密码验证函数

请用你熟悉的编程语言写一个用户密码验证函数,

Boolean checkPW ( String用户ID, String密码明文,String密码密文)

返回密码是否正确boolean值,密码加密算法使用你认为合适的加密算法

为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术可分为三类:单项散列加密,对称加密,非对称加密。

用户注册和登录时序图见下:

MAC 是密钥相关的 哈希运算消息认证码(Hash-based Message Authentication Code),HMAC 运算利用 哈希算法 (MD5、SHA1 等),以 一个密钥 和 一个消息 为输入,生成一个 消息摘要 作为输出。

HMAC 发送方 和 接收方 都有的 key 进行计算,而没有这把 key 的第三方,则是 无法计算出正确的 散列值的,这样就可以 防止数据被篡改。

同时考虑将用户ID加入密码中进行加密。

package password;

import java.io.UnsupportedEncodingException;

import javax.crypto.Mac;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

public class test {

public test() {

// TODO Auto-generated constructor stub

}

private static final String KEY_MAC = "HmacMD5";

/**

* 密码校验

*

* @param userId

* 用户id

* @param passwordStr

* 密码明文

* @param encryptPassword

* 加密后密码

* @return

* @throws UnsupportedEncodingException

*/

public static boolean checkPW(String userId, String passwordStr, String encryptPassword) {

/*

* 加密方式: (用户ID+原密码)根据加密的key加密一次

*/

String data = new StringBuilder(userId).append(passwordStr). toString();

String key = "checkPW";// TODO 加密的key

try {

byte[] databytes = data.getBytes("UTF-8");

SecretKey secretKey = new SecretKeySpec(key.getBytes("UTF-8"), KEY_MAC);

Mac mac = Mac.getInstance(secretKey.getAlgorithm());

mac.init(secretKey);

byte[] passwordbytes = mac.doFinal(databytes);

String strpassword = new String(passwordbytes,"UTF-8");

System.out.println(strpassword.getBytes("UTF-8"));

if (strpassword.equals(encryptPassword)) {

return true;

} else {

return false;

}

} catch (Exception e) {

System.out.println("create hmac helper failed.");

return false;

}

}

public static void main(String[] args) {

checkPW("qq123456", "qq689934", "fdfdf");

}

}