编码和加密算法。
前言
ASCLL编码可以分为简单的和在简单基础上复合(即可以有简单编码推出来)的编码。简单的包括ASCll码和双字节的unicode,三字节的utf-8。
主要的编码方式可以分为ASCLL编码和Base64编码,和URL(统一资源定位符)编码中对于中文字体的编码。
加密算法主力军是hash算法、hash算法包括HmaxMD5,MD5,SAH-系列,hash算法的实现有object的哈希算法,hashcode(),等等。hash算法是单向的,产生的结果不可逆。
有了编码,邮件服务器可以将二进制文件向传送文件那样传送,有了加密算法,可以对数据库起到保密作用等等。
字符是指计算机中使用的字母、数字、字和符号,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等。是一种代替意思的字符。
ASCALL编码是一张表,里面包含了常见字符和其十六进制编码。采用编码方式不同,一个相同的字产生的编码也是不一致的。比如说
百度安全验证https://www.baidu.com/s?wd=%E4%B8%AD%E6%96%87
在计算机当中,只能传以字符,比如这种中文字体,是不被赞同的,所以浏览器会自动的将中文转为浏览器自己可以认识的,就是我们要说的URL编码。
URL编码
URLEncoder类:进行URL编码操作,URLDecoder类,进行解码操作
这里举一个简单的栗子。URLEncoder,编码操作
String url=URLEncoder.encode("亚麻和","utf-8");
System.out.println(url);
输出结果:%E4%BA%9A%E9%BA%BB%E5%92%8C
URLDecoder解码操作
String url=URLDecoder.decode("%E4%BA%9A%E9%BA%BB%E5%92%8C","utf-8");
System.out.println(url);
输出结果:亚麻和
注意:不要把URL整个放进URLEncoder,即编码时,只将中文放进Encoder中,解码时,可以将整个URL放进URLDecoder当中。
总结:URL是对字符进行编码,转为%xx的形式
Base64
Base64:将字节数组编码成字符串,或将字符串编码成字节数组。
Base64 基于64,将要处理的字节内容0xe4,0xb8,0xad,一共有二十四位。在Base64中,重新将每六位看成是一个字节。低位任然是从2的零次方开始。先转十进制,然后由十进制转为其他进制
转十六进制有两种方法:
MD5加密算法
对内容进行加密
MessageDigest md5=MessageDigeset.getInstance("MD5")//算法名称可以是MD5,SHA-,等等,是一个算法就成
digest摘要,Message信息,信息和摘要等于MessageDigsest 。在java中,将加密的过程集成为一个类。
md5.update("内容")//将内容存入md5当中
md5.digeset()//加密
md5.digest()返回一个byte[]数组,即加密后的结果,md5.update()面向字节,可见为了文件图片等更加方便的上传到网页上。
为了防止数据库内容被攻击,最常见的攻击就是彩虹表攻击,即手动列一张表,该表包括一些用户最喜欢的密码,还包括密码的哈希值,得到想要的密码简直轻轻松松。怎么办呢?打破密码的稳定性,加盐。盐产生的是随机数。盐加密码然后一个哈希,buff叠满,每次得到的结果都不是一样的,增添了一份保障。
java提供了一个类KeyGenerator(类似于盐),可以产生密钥key。
更有一种加密算法mac它需要的是一个key,所以有产生key的类。
mac.init(key)//对摘要进行初始化
mac.update()//添加内容,通常是密码
mac.dofinal()//得到一个结果,该结果为加密后的内容