网络宝典
第二套高阶模板 · 更大气的阅读体验

加密后还能解密吗?搞懂加密和解密的关系

发布时间:2026-04-26 23:30:30 阅读:3 次

很多人第一次接触“加密”这个词,心里都会嘀咕:把文件锁起来了,那以后还能打开吗?比如用微信发个带密码的压缩包给同事,或者用手机相册的隐私相册功能藏几张照片——这些操作背后到底发生了什么?

加密 ≠ 锁死,而是“换一种方式存”

加密的本质,是用算法把原始数据(比如一段文字、一张照片)变成看起来杂乱无章的密文。这个过程不是销毁,也不是单向封存,而是一次可逆的“变形”。就像把中文翻译成英文:原文变了,但只要掌握对应规则,就能翻回来。

解密,得看用的是哪种“锁”

关键点来了:不是所有加密都支持解密。主要分两类:

1. 对称加密:一把钥匙,既上锁也开锁
比如 AES、DES。你用密码“123abc”加密一个 Word 文档,之后输入同样的“123abc”,就能原样还原。日常软件像 WinRAR、7-Zip 加密压缩包,还有微信文件传输助手里的“加密文档”,走的都是这条路。

2. 非对称加密:两把钥匙,公钥锁,私钥开
比如 RSA。你把公钥发给别人,他用它加密消息发给你;只有你手里的私钥才能解开。支付宝付款时的签名验证、HTTPS 网站的小锁图标,背后都是这种机制。它也能解密,只是钥匙不共享。

但有些“加密”,真解不开

比如你在注册网站时输的密码,后台通常不会用 AES 存,而是用 SHA-256 或 bcrypt “哈希”一下再存。这叫单向散列,不是加密——它没有解密这回事。系统只记得“你的密码哈希值是 abc123…”,登录时把你新输的密码也哈希一遍,比对结果是否一致。哪怕黑客偷到数据库,也变不回原始密码。

简单记:加密是为了保密且可还原;哈希是为了验证且不还原。

一个小实验:试试看能不能“反着来”

打开浏览器开发者工具(F12),在 Console 里粘贴运行:

const encoder = new TextEncoder();
const data = encoder.encode("你好世界");
const hashBuffer = await crypto.subtle.digest("SHA-256", data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
console.log(hashArray.map(b => b.toString(16).padStart(2, "0")).join(""));

你会看到一长串十六进制字符,比如 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b。这就是“你好世界”的 SHA-256 哈希值。你没法从这串字符倒推出原文——它没设计成可逆的。

所以回到最初的问题:“加密后还能解密吗?”答案很实在:能,前提是它真是加密,而且你有对应的密钥或密码。别把哈希当加密,也别把忘了密码当成“技术问题”——那可能真就打不开了。