发表于: 2018-03-05 23:50:46

1 594


今日完成:

1.       MD5加盐

使用MD5存在一个问题,相同的password生产的Hash值是相同的,如果两个用户设置了相同的密码,那么数据库当就会存储相同的值,这样是极不安全的

彩虹表是一个字符串与其哈希值对应的表,我们可以根据哈希值 得到密码明文

现阶段,随着计算机运算能力的提高与分布式系统的出现,彩虹表查找变得十分容易,但是,所有这些彩虹表都有其特定适用的密码长度和字母组合。太长的密码(如数十位),或者包含表中没有的字符,那么用彩虹表就无法破解。

当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列

//加盐
String inputStr = id.toString() + "@" + name + "#" + password;

2.       mappersql查询语句要使用trycatch防止不规范输入导致系统出错

3.       MessageDigest

MessageDigest 类为应用程序提供信息摘要算法的功能,如 MD5 SHA 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

4.       MD5基本过程

public class MD5 {
   
public static final String KEY_MD5 = "MD5";

    public static
String getResult(Integer id, String name, String password) {
        BigInteger bigInteger =
null;
       
//加盐
       
String inputStr = id.toString() + "@" + name + "#" + password;
        try
{
           
//实例化和初始化
           
MessageDigest md = MessageDigest.getInstance(KEY_MD5);
           
//得到一个操作系统默认的字节编码格式的字节数组
           
byte[] inputData = inputStr.getBytes();
           
md.update(inputData);
           
//进行哈希计算(digest),并转换数据类型
           
bigInteger = new BigInteger(md.digest());
       
} catch (Exception e) {
            e.printStackTrace()
;
       
}
       
//将当前 BigInteger 对象的数值转换为其等效字符串表示形式。
       
return bigInteger.toString(16);
   
}
}

5.       CookieSession都是常用的会话跟踪技术。

Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。

 

psCookie被禁用

GET: 将发送给服务器的数据包含在请求的url中,比如请求的参数或者请求的路径中。

POST: 将数据包含在http请求的内容区域内(post可以同时使用两种方法)

Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie类对象对客户端Cookie进行操作。通过request.getCookie()获取客户端提交的所有Cookie(以Cookie[]数组形式返回),通过response.addCookie(Cookie cookie)向客户端设置Cookie。(jsp这种也可以直接使用)

 

Cookie不可跨域名性

Cookie在客户端是由浏览器来管理的。浏览器能够保证Google只会操作GoogleCookie而不会操作BaiduCookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。

 

中文与英文字符不同,中文属于Unicode字符,在内存中占4个字符,而英文属于ASCII字符,内存中只占2个字节。Cookie中使用Unicode字符时需要对Unicode字符进行编码,否则会乱码。

Cookie中保存中文只能编码。一般使用UTF-8编码即可。不推荐使用GBK等中文编码,因为浏览器不一定支持,而且JavaScript也不支持GBK编码。

 

由于浏览器每次请求服务器都会携带Cookie,因此Cookie内容不宜过多,否则影响速度。Cookie的内容应该少而精。

 

String name:该Cookie的名称。Cookie一旦创建,名称便不可更改。

Object value:该Cookie的值。如果值为Unicode字符,需要为字符编码。如果值为二进制数据,则需要使用BASE64编码。

int maxAge:该Cookie失效的时间,单位秒。如果为正数,则该Cookie>maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1

boolean secure:该Cookie是否仅被使用安全协议传输。安全协议。安全协议有HTTPSSSL等,在网络>上传输数据之前先将数据加密。默认为false

String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。

String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。

String comment:该Cookie的用处说明。浏览器显示Cookie信息的时候显示该说明。

int version:该Cookie使>用的版本号。0表示遵循NetscapeCookie规范,1表示遵循W3CRFC 2109规范。

 

Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie

ps:修改、删除Cookie时,新建的CookievaluemaxAge之外的所有属性,例如namepathdomain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。

domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie,可以生成两个Cookiedomain属性分别为两个域名,输出到客户端。

浏览器会将domainpath都相同的cookie保存在一个文件里,cookie间用*隔开。

 

HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。如果不希望CookieHTTP等非安全协议中传输,可以设置Cookiesecure属性为true

 

W3C标准的浏览器会阻止JavaScript读写任何不属于自己网站的Cookie。换句话说,A网站的JavaScript程序读写B网站的Cookie不会有任何结果。

 

6.       301302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于:

301 redirect: 301 代表永久性转移(Permanently Moved)

302 redirect: 302 代表暂时性转移(Temporarily Moved )

7.       编码:将数据转化成某种固定的格式的编码信息,方便不同系统间的传输,通过解码编码信息可以得到原始信息

摘要(哈希):验证信息的唯一性,不能通过哈希值还原原始信息

加密:加密传输信息,保证信息的安全性,通过密钥和密文可以还原原始信息

8.       BASE64       严格地说,属于编码格式,而非加密算法   用于传输8Bit字节代码

MD5             (Message Digest algorithm 5,信息摘要算法)

SHA             (Secure Hash Algorithm,安全散列算法)

HMAC          (Hash Message Authentication Code,散列消息鉴别码)

 

BASE加密后产生的字节位数是8的倍数,如果不够位数以=符号填充。

明日计划:

1.       继续整理任务5并提交

2.       开始任务6

遇到的问题:

1.       HMAC256是对称加密吗,可以进行解密吗

收获:

1.       MD5加盐

2.       cookie的基本概念和使用方法,以及部分设置



返回列表 返回列表
评论

    分享到