1、Base64就是用4个字节来表示原来3个字节就能表示完的内容。
2、接口签名和人在纸上签名具有相同的作用。
3、摘要可以理解为一个大哈希数组下标。
4、有key可逆向的算法才是加密。
电子签名,其实和纸上签名一样,是身份的一种证明,起着不可抵赖的作用。
一、base64编码
base64编码核心思想
Base64的核心思路,是将二进制文件,用可打印的64个字符表示出来,因为转换后使用的。字符只有64个,所以叫base64。这64个字符是小写字母a-z、大写字母A-Z、数字0-9、符号” “、”/”;
其转换方法也很简单,就是将3个字节24位,转换为4个6位分组,然后每个分组前面补0,凑成4个字节。编码前是3个字符,编码后是4个字节。因此,编码后数据长度增加大约33%。
闲谈
认真看看base64的api,你就会发现,它和加密方法名称encript相比,它的方法名字叫encode。它最开始是因为邮件中要发送图片(MIME)而被发明出来。但是后来,工程师发现,其他软件和协议也需要类似编码,以解决二进制文件存储和传输的问题;所以base64逐渐流行起来。
因为当前json太流行,有很多工程师开始使用base64将文件(例如图片)编码再当做json参数发送给服务器来实现文件的上传。JWT也采用base64来编码token。还有密钥,有时也使用base64编码之后再发送或者存储起来。
关于base64编码方法,我觉得这篇文件介绍的比较好,http://www.ruanyifeng.com/blog/2008/06/base64.html,感兴趣的可以进一步了解base64。另外,jdk8中已经提供了base64的sdk,大家不用再百度拷贝粘贴工具类了。
所以,以后你千万别再把base64编码叫做加密了。
二、摘要(MD5)
因为签名用到了摘要和加密,所以先来了解一下MD5摘要。
2.1摘要入门
简单来说,摘要是一个固定长度的字节串。
MD5是长度为32的字符串。这32个字节,其实是一个16进制数字,将16进制转换为2进制后,为16个字节。SHA-256和MD5类似,只不过SHA-256的长度为256bit,也就是32字节,长度为MD5的2倍。摘要俗称为指纹,因为一般它被用来校验一个大文件在网络传输过程中是否被篡改。
输入一个大文件或者长字符串,如何计算这个输入的对应摘要,就是MD5和SHA-256这些算法要做的。
单独介绍md5其算法本身,就需要很长的篇幅,这里不做详细介绍,但是能理解其原理很重要。
我个人理解,摘要就像是哈希表中一条记录对应的数组下标。这个数组有点大,MD5对应数组大小为16字节的无符号整数,SHA-256则是32字节无符号整数。实际应用过程中,并不存在这样的大数组,只需按照MD5算法,计算出其下标即可。
在Linux系统中,可以使用md5sum命令直接对一个文件求md5。
2.2摘要总结
这里强调两点:
1、摘要(或者散列),英文Digest,不是加密算法,是不可逆算法。
2、摘要算法的结果是一个定长的数字(MD5是16字节,SHA-256是32字节)。理论上固定字节的长度越长,多个字符串摘要冲突的概率就越低。
三、加密
加密是一门非常深奥和抽象的科学,这里面不做深入研究。因为计算机中,一切都是二进制,所以,一切皆可加密。
一般可以简单的将加密分为两类,对称加密和非对称加密。
对称加密
对称加密算法,即通信双方都有相同的密钥,使用相同的算法进行加密和逆向算法进行解密。对称加密首先是基于双方有共同的密钥,举个例子,甲和乙约定采用密钥为5,甲在发送明文1之前,先将1乘上4,得出结果4,然后发送给乙,乙收到密文4之后,直接除以密钥4,得出甲发送的明文为1。对称加密的前提是双方约定好密钥以及采用的算法;
非对称加密
渐渐的人们发现了对称加密的弊端。如果张三要和李四,王五,赵六都进行通信,为了防止它们互相窃听,就需要为它们三个人各自分配一个密钥和算法,这显然太麻烦。于是有人发明了非对称加密算法。非对称加密的通信双方,各自有自己的公钥和私钥。每个人都可以把自己的公钥公开,私钥保留。这样,如果张三要和李四发送信息,就直接用李四的公钥加密。李四收到加密信息后,使用自己的私钥进行解密,这样大家就不用担心密钥被多人共享的问题。非对称加密的算法更加复杂,不能采用简单的加减乘除来解释,所以这里不做详细讲解。
RSA加密过程
四、签名
介绍完摘要和加密,来说一下签名。其实签名是一个加密的摘要,计算机是按照一定算法,对信息进行SHA-1(或者SHA-256)摘要后,使用非对称加密算法的私钥对摘要进行加密,得出的密文。因为签名是有归属的,所以说签名会代表一个人或者组织。
计算机中的签名跟纸质签名的作用,完全一样。它主要作用是证明你已经知晓此事,你的签名具备法律意义,不可抵赖。
4.2签名应用
签名最重要的应用,就是https的权威(CA)证书。一个https网站,通常需要一个合法证书,而且这个证书是权威机构颁发的,才能被操作系统认可。也就是在浏览器中,不会出现经过提示。如下:
而如果证书不是权威机构颁发的,就会出现风险提示。
每个证书里面,都有一个权威机构的签名。每次https通信握手时,操作系统都会将权威机构的公钥取出来,将签名进行解密做验证。
参考资料:
http://www.ruanyifeng.com/blog/2008/06/base64.html