发表于: 2018-02-04 20:48:58

1 836


今天完成的事情:
首先是学习了一下关于MD5加密和DES加密:
下面是DES算法的加密解密:
这个很简单。
一开始想在控制层进行加盐的算法,但是在和师兄讨论了一下,知道可以把盐放在数据库中。
然后自己打了一个简单的项目,尝试了一下关于MD5的加密、加盐和登录。
首先是关于注册:
数据库数据如下:
用户成功注册到数据库。接着是登录。
也就是完成了MD5的登录验.
MD5类如下:
import java.security.MessageDigest;
/**
* @author guoxk
* @version 创建时间 2016年1月7日 下午1:47:06
* <p>
* 类描述:MD5加密工具类
*/
public class MD5Util {
/**
* @param str 明文
* @param charSet 字符编码
* @return 密文
* @author guoxk
* <p>
* 方法描述:MD5加密方法
*/
public static String MD5(String str, String charSet) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
if (charSet == null) {
messageDigest.update(str.getBytes());
} else {
messageDigest.update(str.getBytes(charSet));
}
} catch (Exception e) {
e.printStackTrace();
}
byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
/**
* @param s 明文
* @return 密文
* @author guoxk
* <p>
* 方法描述:MD5加密方法 --- UTF-8编码
*/
public static String MD5(String s) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
try {
byte[] btInput = s.getBytes("utf-8");
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
UUID随机数工具类如下:
import java.util.UUID;
public class GUID {
public static String getUUID(){
UUID uuid= UUID.randomUUID();
String str = uuid.toString();
String uuidStr=str.replace("-", "");
return uuidStr;
}
}
注册逻辑如下:
@RequestMapping(value = "/student/register", method = RequestMethod.POST)
public String one(@Param("name") String name, @Param("pwd") String pwd, String md5, String salt, ModelMap model) throws Exception {
User user = new User();
salt = GUID.getUUID();
md5 = MD5Util.MD5(pwd + salt);
user.setName(name);
user.setPwd(pwd);
user.setMd5(md5);
user.setSalt(salt);
userService.insert(user);
return "welcome";
}
验证登录逻辑如下:
@RequestMapping(value = "/student", method = RequestMethod.POST)
public String one(@Param("name") String name, @Param("pwd") String pwd, ModelMap model) throws Exception {
User user = userService.selectByName(name);
if (user.getName() != null) {
String salt = user.getSalt();
String md52 = MD5Util.MD5(pwd + salt);
if (Objects.equals(md52, user.getMd5())) {
return "successfully";
}
}
return "jsp";
}
也就是基本完成了任务五的前一半:
明天计划的事情:
遇到的问题:
1.jetty可以进入首页,但是Tomcat无法进入首页的问题。
后面好像是MVC的驱动引错了,也就是SpringMVC的头文件引错了。
2.乱码问题 
 
未设置之前效果如下:
首先设置所配置tomcat的编码格式,否则有可能出现打开页面或控制台乱码的问题,设置VM options为-Dfile.encoding=UTF-8
设置之后效果如下:
然后在WEB.XML中添加字符过滤。
<!--文字编码处理-->
<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
效果如下:
2.在数据库通过姓名查找用户的时候,报错如下:
java.lang.String cannot be cast to java.lang.Integer
仔细寻找一番,发现忘了更改mybatis的传入参数类型:
<select id="selectByName" parameterType="java.lang.Integer" resultMap="BaseResultMap">
按着试一试的想法,将参数类型改为String。
<select id="selectByName" parameterType="java.lang.String" resultMap="BaseResultMap">
错误解决:
收获:
1.在建立项目前,先确定好需求是什么,想好需要怎么写,需要哪些逻辑和方法,不然等到后面,又需要改项目,又需要改数据表会很麻烦。
进度:完成MD5加密算法和登录验证。



返回列表 返回列表
评论

    分享到