用户登录时需要对密码等重要信息进行加密处理。可以在后台或者前后台同时加密进行加密,主要是在后台进行加密,然后将生成的密文存储到数据库,下次登录时再用同样的加密算法生成的密文和数据库的进行比对。
另外在使用HTTPS的情况下比HTTP协议的安全性更好。
加密流程:
1. 用户提交用户信息,例如密码;
2. 服务器收到明文后进行加密(常用的有MD5、SHA等),生成密文;
3. 服务器将生成的密文存入数据库。
验证流程:
1. 用户提交用户信息;
2. 服务器根据明文生成密文;
3. 将生成的密文与数据库中的密文进行比对。
1. MessageDigest方法摘要
方法摘要 | |
---|---|
Object |
clone() 如果实现是可复制的,则返回一个副本。 |
byte[] |
digest() 通过执行诸如填充之类的最终操作完成哈希计算。 |
byte[] |
digest(byte[] input) 使用指定的字节数组对摘要进行最后更新,然后完成摘要计算。 |
int |
digest(byte[] buf, int offset, int len) 通过执行诸如填充之类的最终操作完成哈希计算。 |
String |
getAlgorithm() 返回标识算法的独立于实现细节的字符串。 |
int |
getDigestLength() 返回以字节为单位的摘要长度,如果提供程序不支持此操作并且实现是不可复制的,则返回 0。 |
static MessageDigest |
getInstance(String algorithm) 生成实现指定摘要算法的 MessageDigest 对象。 |
static MessageDigest |
getInstance(String algorithm, Provider provider) 生成实现指定提供程序提供的指定算法的 MessageDigest 对象,如果该算法可从指定的提供程序得到的话。 |
static MessageDigest |
getInstance(String algorithm, String provider) 生成实现指定提供程序提供的指定算法的 MessageDigest 对象,如果该算法可从指定的提供程序得到的话。 |
Provider |
getProvider() 返回此信息摘要对象的提供程序。 |
static boolean |
isEqual(byte[] digesta, byte[] digestb) 比较两个摘要的相等性。 |
void |
reset() 重置摘要以供再次使用。 |
String |
toString() 返回此信息摘要对象的字符串表示形式。 |
void |
update(byte input) 使用指定的字节更新摘要。 |
void |
update(byte[] input) 使用指定的字节数组更新摘要。 |
void |
update(byte[] input, int offset, int len) 使用指定的字节数组,从指定的偏移量开始更新摘要。 |
void |
update(ByteBuffer input) 使用指定的 ByteBuffer 更新摘要。 |
2. MD5 加密
public class Main {
public static void main(String[] args) throws NoSuchAlgorithmException {
String pw = "11112";
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(pw.getBytes());
byte[] b = md.digest();
System.out.println(byte2hex(b));
}
public static String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
}
return hs.toUpperCase();
}
}
//结果:25F9E794323B453885F5181F1B624D0B
SHA-1加密
public static void main(String[] args) throws NoSuchAlgorithmException {
String pw = "123456789";
MessageDigest md = MessageDigest.getInstance("SHA-1");
md.update(pw.getBytes());
byte[] b = md.digest();
System.out.println(byte2hex(b));
}
public static String byte2hex(byte[] b) //二行制转字符串
{
String hs="";
String stmp="";
for (int n=0;n<b.length;n++)
{
stmp=(Integer.toHexString(b[n] & 0XFF));
if (stmp.length()==1) hs=hs+"0"+stmp;
else hs=hs+stmp;
}
return hs.toUpperCase();
}
}
//结果:F7C3BC1D808E04732ADF679965CCC34CA7AE3441