发表于: 2017-09-15 22:37:16
1 736
今天完成的事情:完成了任务五的拆分 任务基本要求是要先写一个登录界面完成登录 或者注册
然后看了一下md5加密 以及加盐des加密
大致理解了他们的概念 md5不可逆 但是如果太过简单 可以通过彩虹表对比出来
不可逆是指加密后的数据本身不能还原为原始密码
但是因为md5算法本身固定 把一些简单密码全部用md5加密 得到的数据就叫做彩虹表
这样对比彩虹表就可以知道一些简单的密码了 可能用户自己设置的密码是简单密码
所以这里就要加盐 就是在用户设置的密码前后在拼接一个字符串作为盐
来使得这个简单密码变得复杂 在进行md5加密
而des加密是对称加密 使用56位密钥根据一些列操作来加密
网上百度了一个例子
import java.security.SecureRandom;
import javax.crypto.spec.DESKeySpec;
import javax.crypto.SecretKeyFactory;
import javax.crypto.SecretKey;
import javax.crypto.Cipher;
/**
* DES加密介绍 DES是一种对称加密算法,所谓对称加密算法即:加密和解密使用相同密钥的算法。DES加密算法出自IBM的研究, 后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为DES使用56位密钥,以现代计算能力,
24小时内即可被破解。虽然如此,在某些简单应用中,我们还是可以使用DES加密算法,本文简单讲解DES的JAVA实现 。
* 注意:DES加密和解密过程中,密钥长度都必须是8的倍数
*/
public class DES
{
public DES()
{
}
// 测试
public static void main(String args[])
{
// 待加密内容
String str = "测试内容";
// 密码,长度要是8的倍数
String password = "9588028820109132570743325311898426347857298773549468758875018579537757772163084478873699447306034466200616411960574122434059469100235892702736860872901247123456";
byte[] result = DES.encrypt(str.getBytes(), password);
System.out.println("加密后:" + new String(result));
// 直接将如上内容解密
try
{
byte[] decryResult = DES.decrypt(result, password);
System.out.println("解密后:" + new String(decryResult));
} catch (Exception e1)
{
e1.printStackTrace();
}
}
/**
* 加密
*
* @param datasource
* byte[]
* @param password
* String
* @return byte[]
*/
public static byte[] encrypt(byte[] datasource, String password)
{
try
{
SecureRandom random = new SecureRandom();
DESKeySpec desKey = new DESKeySpec(password.getBytes());
// 创建一个密匙工厂,然后用它把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();
}
return null;
}
/**
* 解密
*
* @param src
* byte[]
* @param password
* String
* @return byte[]
* @throws Exception
*/
public static byte[] decrypt(byte[] src, String password) throws Exception
{
// DES算法要求有一个可信任的随机数源
SecureRandom random = new SecureRandom();
// 创建一个DESKeySpec对象
DESKeySpec desKey = new DESKeySpec(password.getBytes());
// 创建一个密匙工厂
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);
}
完全没看懂 md5也是 不过好像也不需要看懂 直接借鉴相关的工具类
http://z2009zxiaolong.iteye.com/blog/1562197 这里有写好的工具类
主要还是写接口 接口写在controller里面
这个逻辑有点没理清 就是应该是在数据库里面进行加密还是在service加密
新建了一个数据库 储存相应的信息
然后就是调用数据库一个是注册一个是登录验证
写的有问题 注册就失败了
明天计划的事情:写好登录 注册
遇到的问题:接口不会写 逻辑有点不清楚 加密 在哪个位置开始加密啊 然后还需要解密 在哪里解密啊
不能写在controller里吧 在写service里面吗
完全没搞懂什么鬼
收获:学习了md5加密 加盐 des加密的概念 大致了解了如何在java程序里面使用
又看了拦截器 过滤器 监听器的概念
拦截器 :是面向切面编程的,就是在你的service或者一个方法的时候,前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。拦截器请求是通过实现HandlerInterceptor接口来完成的.HandlerInterceptor接口定义了三个方法,spring mvc就是通过这三个方法来对用户请求进行拦截处理
过滤器:是在springmvc中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数。
然后再传入servlet进行业务逻辑,比如过滤掉非法url。或者在传入servlet前统一设置字符集,或者去除掉一些非法字符。主要为了减轻服务器负载,减少压力。
拦截器和过滤器的一些区别:拦截器是基于java的反射机制的,而过滤器是基于函数回调;过滤器依赖与servlet容器,而拦截器不依赖与servlet容器;拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用;拦截器可以访问action上下文、值栈里的对象,而过滤器不能;在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
监听器是实现了javax.servlet.ServletContextListener接口的服务器端程序,它也是随web应用的启动而启动,只初始化了一次,随web应用的停止而销毁。主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。
任务开始时间:9.15
预计完成时间:9.20
是否有延期风险:暂无
禅道链接:http://task.ptteng.com/zentao/my-task.html
评论