发表于: 2017-10-27 22:59:32
1 757
今天完成的事
1. 了解拦截器
2. 完成MD5
3. 和DES的算法加密
完成任务4的收尾工作
把Long类型时间转化为固定格式的时间信息输出
.png)

给header部分的登录状态做一个判定
当用户未登陆时,header部分为注册和登录按钮
.png)

当用户登陆后,header部分显示当前时间,列表展示和退出登录
.png)

遇到的问题
tomcat发布项目后404
发布项目的时候千万要记得修改数据库配置,血淋淋的教训,大概花了有三四个小时来解决这个问题.我一开始想着只是访问index.jsp,不涉及数据库操作应该可以打开没问题的,但是真相是你不修改数据库连接配置tomcat都打不开来
明天计划的事
加密id和登陆时间,生成token,放入cookie
收获
1. 完成MD5
public static String getMD5(String message){
String md5str = "";
try{
//创建一个提供信息的摘要算法,初始化为md5对象
MessageDigest md = MessageDigest.getInstance("MD5");
//将消息变为byte数组
byte[] input = message.getBytes();
//计算后获得字节数组,这就是那128位了
byte[] buff = md.digest(input);
//把数组每一字节(一个字节占八位)换成16进制连成md5字符串
md5str = bytesToHrx(buff);
}catch (Exception e){
e.printStackTrace();
loggerMD5.error("e.getMessage(): " + e.getMessage());
}
return md5str;
}
//二进制转换为16进制
public static String bytesToHrx(byte[] bytes){
StringBuffer md5str = new StringBuffer();
// 把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++){
digital = bytes[i];
if(digital < 0){
digital += 256;
}
if(digital < 16){
md5str.append("0");
}
md5str.append(Integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}

2. 和DES的算法加密
//加密
public byte[] desCrypto(byte[] datasource,String password){
try{
//生成一个强随机的数
SecureRandom random = new SecureRandom(password.getBytes());
DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8"));
//创建一个密匙工厂,然后用它把DESKeySpec转换成
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE, securekey, random);
//现在,获取数据并加密
//正式执行加密操作
return cipher.doFinal(datasource);
}catch(Throwable e){
e.printStackTrace();
loggerDES.error("e.getMessage(): " + e.getMessage());
}
return null;
}
//解密
public byte[] decrypt(byte[] src, String password) throws Exception{
//DES算法要有一个可信任的随机数源
SecureRandom random = new SecureRandom();
//创建一个DESKeySpec对象
DESKeySpec desKey = new DESKeySpec(password.getBytes("UTF-8"));
//创建一个密匙工厂
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
//将DESKeySpec对象转换成SecretKey对象
SecretKey securekey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
//用密匙初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,securekey, random);
//真正开始解密
return cipher.doFinal(src);
}

乱码预计是因为无法用UTF-8来表示,但是信息并没有失真,如果有需要,可以用16进制进行编码。
评论