序列化反序列化LoginModel后AES解密失效的原因排查
问题成因分析
以下是导致序列化反序列化后解密失效的常见核心原因:
- 加密依赖的状态未被正确序列化:如果LoginModel中持有
AesEncryption类的实例(包含密钥、IV等核心加密参数),Newtonsoft.Json默认不会序列化非公共成员或未标记[JsonProperty]的复杂对象字段。反序列化后,AesEncryption实例会丢失关键状态(比如已生成的IV),导致解密时无法匹配加密时的参数组合,解密失败。 - 属性访问器与序列化逻辑冲突:若LoginModel的用户名/密码属性通过getter解密、setter加密实现逻辑,但属性的setter为私有或未标记
[JsonProperty],Newtonsoft.Json会直接反射修改底层字段而非调用setter。这会导致反序列化时,加密后的字符串被直接赋值给字段(或明文被直接写入),跳过了加密/解密的逻辑校验,后续调用解密方法时使用的是错误的数据源。 - AesEncryption类未实现序列化兼容:如果
AesEncryption类未添加[Serializable]特性,或未将密钥、IV等必要字段标记为可序列化(比如用[JsonProperty]),Newtonsoft.Json序列化时会忽略这些核心参数。反序列化得到的AesEncryption实例是不完整的,无法还原加密时的上下文,自然无法完成解密。 - 反序列化未触发构造时的加密逻辑:LoginModel的加密逻辑仅在构造函数中执行,但Newtonsoft.Json默认使用无参构造函数创建实例,随后直接赋值字段/属性,不会调用带参构造函数的加密逻辑。这会导致反序列化后的LoginModel要么持有明文(而非加密后的值),要么持有加密值但缺少对应的加密上下文,最终解密失败。
内容的提问来源于stack exchange,提问作者3xGuy
相关产品推荐
相关产品推荐

