楼上的回答没一个靠谱的。 最简单的办法,把用户的 union_id 或者 openid 当做加密的 key,当然也要做一些处理,例如做 md5 处理生成 32 位的 aes key 用于加密数据。 其次,服务器上不存储明文的 union_id,可做 hash 处理后存储数据库用于标识唯一用户。 这个方案相当于把安全问题丢给了第三方,也就是小程序这边。我考虑过使用登录态相关的字段来加密,例如 token 之类的,但每次登录都会导致 token 发生变化,所以不适用这个场景。 这样处理的好处是,黑客拿到服务器权限,也只能拿到 hash 处理后的数据,无法逆向拿到 union_id。 坏处就是一旦 union_id 泄漏,则用户所有数据暴露。而且按照微信小程序的授权登录流程,access_toekn 泄漏的可能性还是比较大的。 所以这个方案还有进一步优化的空间,例如对 access_token 做加密存储,客户端也不直接存储 union_id,客户端和服务端之间的通信使用 curve25519 算法生成共享密钥用于加密双方传输的数据等等。