发表于: 2018-03-05 23:50:46
1 595
今日完成:
1. MD5加盐
使用MD5存在一个问题,相同的password生产的Hash值是相同的,如果两个用户设置了相同的密码,那么数据库当就会存储相同的值,这样是极不安全的
彩虹表是一个字符串与其哈希值对应的表,我们可以根据哈希值 得到密码明文
现阶段,随着计算机运算能力的提高与分布式系统的出现,彩虹表查找变得十分容易,但是,所有这些彩虹表都有其特定适用的密码长度和字母组合。太长的密码(如数十位),或者包含表中没有的字符,那么用彩虹表就无法破解。
当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列
//加盐
String inputStr = id.toString() + "@" + name + "#" + password;
2. mapper中sql查询语句要使用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. Cookie和Session都是常用的会话跟踪技术。
Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
当用户使用浏览器访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息并且提交至服务器;接着,服务器在向客户端回传相应的超文本的同时也会发回这些个人信息,当然这些信息并不是存放在HTTP响应体(Response Body)中的,而是存放于HTTP响应头(Response Header);当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器。而这次,Cookie信息则存放在HTTP请求头(Request Header)了。有了Cookie这样的技术实现,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求头的Cookie得到客户端特有的信息,从而动态生成与该客户端相对应的内容。
ps:Cookie被禁用
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只会操作Google的Cookie而不会操作Baidu的Cookie,从而保证用户的隐私安全。浏览器判断一个网站是否能操作另一个网站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是否仅被使用安全协议传输。安全协议。安全协议有HTTPS,SSL等,在网络>上传输数据之前先将数据加密。默认为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表示遵循Netscape的Cookie规范,1表示遵循W3C的RFC 2109规范。
Cookie并不提供修改、删除操作。如果要修改某个Cookie,只需要新建一个同名的Cookie,添加到response中覆盖原来的Cookie。如果要删除某个Cookie,只需要新建一个同名的Cookie,并将maxAge设置为0,并添加到response中覆盖原来的Cookie。
ps:修改、删除Cookie时,新建的Cookie除value、maxAge之外的所有属性,例如name、path、domain等,都要与原Cookie完全一样。否则,浏览器将视为两个不同的Cookie不予覆盖,导致修改、删除失败。
domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。如果想要两个域名完全不同的网站共有Cookie,可以生成两个Cookie,domain属性分别为两个域名,输出到客户端。
浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
HTTP协议不仅是无状态的,而且是不安全的。使用HTTP协议的数据不经过任何加密就直接在网络上传播,有被截获的可能。使用HTTP协议传输很机密的内容是一种隐患。如果不希望Cookie在HTTP等非安全协议中传输,可以设置Cookie的secure属性为true。
W3C标准的浏览器会阻止JavaScript读写任何不属于自己网站的Cookie。换句话说,A网站的JavaScript程序读写B网站的Cookie不会有任何结果。
6. 301,302 都是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的基本概念和使用方法,以及部分设置
评论