如何加密待办清单分享数据 生成可短链传播、客户端可解密的安全URL参数
功能实现方案
方案1:加密字符串实现(无需额外存储)
该方案直接把清单参数加密后放到URL中,不需要服务端额外存映射关系:
- 第一步:参数序列化:把清单的
lid、oid、type三个参数转为无空格的紧凑JSON字符串,减少冗余长度,示例:{"lid":"xxx...","oid":"xxx...","type":1} - 第二步:加密处理:选择AES-128-GCM对称加密算法对JSON字符串加密,密钥仅保存在你的服务端和可信客户端内。加密后得到密文、IV向量、认证标签三个部分,将三者拼接后做
Base64URL编码,得到URL友好的安全加密字符串。这里选择GCM模式是因为自带完整性校验,可防止参数被恶意篡改。 - 第三步:生成短链:将加密字符串作为参数拼接到你的应用域名下,生成长链接格式如
https://todolistapp.com/share?data=加密字符串,再将该长链通过短链服务生成你需要的短链格式https://todolistapp.com/shorturl即可。 - 第四步:解密还原:用户访问短链时会跳转到你的应用长链接,客户端/服务端拿到
data参数后,先做Base64URL解码,再用密钥解密,校验认证标签合法后即可解析出原始的三个清单参数,获取对应清单数据。
方案2:短码映射实现(更简单高效)
如果不想处理复杂的加解密逻辑,可选择更轻量化的映射方案:
- 第一步:把
lid、oid、type三个参数存入服务端数据库,生成一个全局唯一的6-8位随机短码,和这三个参数做关联映射。 - 第二步:直接用短码生成长链接
https://todolistapp.com/share?code=短码,再生成短链即可。 - 第三步:用户访问时,服务端拿短码查询数据库即可得到对应的清单参数,无需加解密,性能更高,短链长度也更短,唯一要求是需要额外的数据库存储。
可选优化点
- 如果加密后的字符串过长,可在序列化JSON后先做gzip压缩再加密,可缩短30%以上的长度。
- 可给加密字符串加过期时间,把过期时间戳一起放到加密的参数里,解密时校验时间,实现分享链接过期失效的能力。
内容的提问来源于stack exchange,提问作者Hugo Pretorius
相关产品推荐
相关产品推荐

