加密和解密:钥匙不是一把
你给朋友发条重要消息,不想被别人看到,怎么办?加密。就像把信塞进带锁的盒子里。但这个“锁”怎么开,就得靠钥匙。可很多人搞不清:加密用的钥匙和解密用的钥匙,是一回事吗?其实,这得分情况。
对称加密:一把钥匙开两道门
最常见的场景是公司内部传文件。小李用一个密码把文件加密,发给小王,小王用同一个密码打开。这种叫对称加密,加密密钥和解密密钥是同一个。简单高效,就像家门钥匙,开门关门都靠它。
典型算法比如 AES,代码里可能是这样:
AES.encrypt(data, "mysecretpassword");
AES.decrypt(encryptedData, "mysecretpassword");问题也明显:怎么安全地把密码告诉小王?要是被人中途截获,就全白忙了。
非对称加密:公钥私钥配对用
网上购物时,你输信用卡信息,网站怎么保证不被偷看?这时候用的是非对称加密。它有两把钥匙:一把公开的(公钥),谁都能拿;一把私有的(私钥),只有自己保管。
比如网站生成一对密钥,把公钥发给你。你用公钥加密数据再上传,网站用自己的私钥解密。黑客就算拿到公钥,也解不开内容,因为只有私钥能解。
反过来,网站也能用私钥“签名”,你用公钥验证身份,确保没被冒充。这就是 HTTPS 小锁图标背后的原理。
常见的 RSA 算法示意:
// 网站持有私钥
privateKey = generatePrivateKey();
publicKey = derivePublicKey(privateKey);
// 你用公钥加密
encrypted = RSA.encrypt(data, publicKey);
// 网站用私钥解密
decrypted = RSA.decrypt(encrypted, privateKey);实际应用:常常混着用
真正在网络上传输数据时,不会只用一种方式。比如 TLS 握手阶段,先用非对称加密交换一个临时的对称密钥,之后通信全用这个对称密钥加密。既保证了安全性,又提升了速度。
你可以理解成:先用保险柜寄个密码条,之后就用这个密码打电话聊细节。
所以,加密密钥和解密密钥是不是一样,关键看用的是哪种机制。对称加密里是同一把,非对称加密里则是配对但不同的两个东西。搞清这点,看懂大多数网络安全设计就没那么难了。