发表于: 2017-05-01 21:22:24
2 1359
今天完成的事情:
DES加密概念
DES全称Data Encryptoin Standard,即数据加密标准,是一种使用秘钥加密的块算法,DES算法为密码体制中的对称码体制,又称为美国数据加密标准。明文按64位进行分组,秘钥长64位,秘钥事实上是56位参与DES运算(第8,16,24,32,40,48,56,64位是校验位,使得每一个秘钥都有奇数个1)分组后的明文组和56位的秘钥按位代替或者交换的方式形成密文组的加密方法。
基本原理
入口参数有三个:key,data,mode。key为加密解密使用的秘钥,data未加密解密的数据,mode为其工作模式、当模式为加密模式时,明文按照64为进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,秘钥只用到了64位中的56位,这样才具有高的安全性。
对DES算法工作完全看不懂。只是对照例子敲了一遍,测试一遍成功了。
public class DES {
public DES(){
}
//加密
public static byte[] encrype(byte[] datasource,String password){
try{
SecureRandom random = new SecureRandom();
DESKeySpec desKey = new DESKeySpec(password.getBytes());
//创建一个秘钥工厂,然后用它把DESKeySpec转换成
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekry = keyFactory.generateSecret(desKey);
//Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
//用秘钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE,securekry,random);
//现在,获取数据并加密
//正在执行加密操作
return cipher.doFinal(datasource);
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
//解密
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 secretKey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
//用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,secretKey,random);
//真正开始解密操作
return cipher.doFinal(src);
}
//测试
public static void main(String[] args){
//待加密内容
String str = "ck天下第一最帅";
//密码。长度要是8的倍数
String password = "9588028820109132570743325" +
"31189842634785729877354946875887" +
"50185795377577721630844788736994" +
"47306034466267816411960574122434059" +
"4691002358927027368608729" +
"01247123456";
byte[] result = DES.encrype(str.getBytes(),password);
System.out.println("加密后:"+new String(result));
//直接将如上内容解密
try{
byte[] decryResult = DES.decrypt(result,password);
System.out.println("解密后:"+new String(decryResult));
}catch (Exception e){
e.printStackTrace();
}
}
public DES(){
}
//加密
public static byte[] encrype(byte[] datasource,String password){
try{
SecureRandom random = new SecureRandom();
DESKeySpec desKey = new DESKeySpec(password.getBytes());
//创建一个秘钥工厂,然后用它把DESKeySpec转换成
SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
SecretKey securekry = keyFactory.generateSecret(desKey);
//Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance("DES");
//用秘钥初始化Cipher对象
cipher.init(Cipher.ENCRYPT_MODE,securekry,random);
//现在,获取数据并加密
//正在执行加密操作
return cipher.doFinal(datasource);
}catch(Throwable e){
e.printStackTrace();
}
return null;
}
//解密
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 secretKey = keyFactory.generateSecret(desKey);
//Cipher对象实际完成解密操作
Cipher cipher = Cipher.getInstance("DES");
//用密钥初始化Cipher对象
cipher.init(Cipher.DECRYPT_MODE,secretKey,random);
//真正开始解密操作
return cipher.doFinal(src);
}
//测试
public static void main(String[] args){
//待加密内容
String str = "ck天下第一最帅";
//密码。长度要是8的倍数
String password = "9588028820109132570743325" +
"31189842634785729877354946875887" +
"50185795377577721630844788736994" +
"47306034466267816411960574122434059" +
"4691002358927027368608729" +
"01247123456";
byte[] result = DES.encrype(str.getBytes(),password);
System.out.println("加密后:"+new String(result));
//直接将如上内容解密
try{
byte[] decryResult = DES.decrypt(result,password);
System.out.println("解密后:"+new String(decryResult));
}catch (Exception e){
e.printStackTrace();
}
}
运行结果:

什么是cookie?
cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。你可以使用 JavaScript 来创建和取回 cookie 的值。
由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

什么是session?
浏览器访问服务器时,服务器会创建一个 session 对象(该对象有一个唯一的 id, 一般称为 sessionId)。服务器在缺省情况下,会将 sessionId 以 cookie 机制发送给浏览器。当浏览器再次访问服务器时, 会将sessionId 发送给服务器。 服务器依据 sessionId 就可以找到对应的 session 对象。

3.cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
明天计划的事情:
使用DES对用户ID和登录时间加密,生成Token,放入Cookie。中拦截器里通过Cookie中判断Token的有效性来判断用户是否登录。
遇到的问题:无
收获:
知道了cookie和session是什么,有什么用途,再就是加密什么的算法工作原理很难懂。。。
评论