编码不是加密,别搞混了
很多人在开发中经常把“编码”和“加密”当成一回事。比如看到 URL 里一堆 %E7%B1%BB%E5%9E%8B 就觉得是加密,其实这只是 URL 编码而已。编码的本质是换一种格式表示数据,方便传输或存储,不涉及安全保护。
常见的编码方式有 Base64、URL 编码、Unicode 转义等。它们的特点是可逆,而且算法公开。比如下面这段 Base64:
SGVsbG8gV29ybGQh一眼就能看出来是 Hello World! 的 Base64 编码结果。用浏览器控制台一解就出来了:
atob('SGVsbG8gV29ybGQh') // 返回 'Hello World!'加密是为了防人看
加密的目的完全不同——是为了不让别人知道内容。它需要密钥参与,没有密钥,就算你拿到数据也看不懂。比如你在网页提交密码,后台通过 HTTPS 传过去,中间就算被截获,看到的也是一堆乱码。
对称加密像一把钥匙开一把锁,加密和解密都用同一个密钥。比如 AES:
<script>
const encrypted = CryptoJS.AES.encrypt('我的秘密', 'key123');
console.log(encrypted.toString());
// 输出类似:U2FsdGVkX19jx+...nR0=
</script>拿到这段密文的人,必须知道密钥 'key123' 才能还原原文。否则光看字符串毫无意义。
非对称加密更安全
比如 HTTPS 用的 RSA,有一对密钥:公钥和私钥。公钥可以公开,用来加密;私钥必须保密,用来解密。就像你往信箱投信,谁都能投(公钥加密),但只有邮差有钥匙打开取信(私钥解密)。
解密是加密的逆过程
编码有“解码”,加密才有“解密”。这两个词不能乱用。Base64 解码是还原原始数据,而 AES 解密是用密钥还原被保护的内容。
举个生活例子:你把日记转成摩斯密码(编码),朋友懂规则就能读;但如果你用密码本加了一层暗号(加密),哪怕他知道是摩斯密码,没密码本也白搭。
开发中常见错误是把 Base64 当加密用,以为别人看不懂就是安全。其实只要一解码,明文直接暴露。真要保护数据,得上 AES 或 RSA 这类加密算法。
工具选对了,事半功倍。编码用于传输适配,加密用于安全保障,搞清区别,代码才靠谱。