做为开发人员,正确使用专业词语是一项基本功,也是表达能力的体现。错误的使用专业术语,可能会让面试官以为你在不懂装懂,以致于错失心仪职位。程序员
就我我的所见,有三个词最常常被错误使用,特别是初学者。那就是“转码”、“签名”和“加密”。面试
不少初学者把一段内容从看得懂的格式变为看不懂的格式,通通叫作“加密”,因而出现所谓“MD5加密”、“Base64加密”这类错误说法。本文将介绍“转码”、“签名”和“加密”三个概念的区别,以帮助初学者正确使用这些术语。算法
转码是指将一段内容从一种编码转换为另外一种编码。转码不会修改内容,其目的是为了知足内容传输格式的须要。安全
例如 Base64 编码,它能够将任何二进制内容转为 ascii 字符串,这样咱们就能够在任何只容许传输字符串的协议中使用二进制内容了,传输协议的接收端收到 Base64 编码的内容,能够将其还原成二进制格式。编码
除此以外常见的转码还有 URL 编码和 hex 编码等等。他们的共同点是:内容能够根据约定的算法,在不一样的格式间独立转换,也就是转换过程不须要借助额外的内容。加密
上面说的独立转换,也就是转换过程不须要借助额外的内容,是什么意思呢?设计
加密也一样是一种格式转换,但转换的过程当中就须要额外内容,也就是加密密钥。对应的,解密的时候也会须要解密密钥。ci
这就是转码和加密的区别。若是一我的把转码说成是加密,说明这我的在系统安全方面存在错误的理解,让其参与系统设计可能会影响系统的安全性。开发
转码和加密都是可逆的,它们的目的都是保证内容在格式受到限制的条件下,可以完整的传输或存储。字符串
可是签名就不同了。签名的做用是用一份简短的内容来检查一份很长的内容是否正确。
例如经过 MD5 算法,能够将一个 1GB 大小的文件生成一个只有 32 字节长的 MD5 签名。一旦这个文件修改了任何一个字节,再次生成的 MD5 签名就会彻底不同。
到这你就能理解,为何签名算法是不可逆的,你不可能将一个 32 字节的签名从新还原成一个 1GB 的文件。因此无论将签名看成是转码仍是加密,都属于很是严重的误解。轻者你可能会只留下签名而删掉原内容,严重状况下,其余程序员会由于你不理解什么是签名而瞧不起你。