Spring Boot集成Redis后如何实现数据加密存储?

千丽大大_5919

千丽大大_5919

2026-07-16

662人浏览

原创

Spring Boot中spring.redis.password仅用于连接认证,不加密数据;Redis默认无服务端TDE,明文存储value,故需在RedisTemplate序列化环节嵌入AES加解密逻辑,实现客户端透明加密。

spring boot集成redis后如何实现数据加密存储?

Spring Boot集成Redis后,RedisTemplate 默认序列化方式(如 Jackson2JsonRedisSerializer)只做 JSON 转换,不加密——数据在 Redis 里仍是明文。要真正加密存储,必须在序列化环节介入,而非靠配置项或密码保护。

为什么不能只靠 spring.redis.password 加密?

Redis 密码仅用于客户端连接认证,不影响数据内容。即使设置了 password,所有写入 redis-cli 或通过 RedisTemplate 存的数据,仍以原始字节形式存在。攻击者若获得 Redis 实例访问权限(比如内网渗透、运维误配),可直接 GET 出完整敏感字段。

  • spring.redis.password 是连接层凭证,不是数据加密密钥
  • Redis 本身不提供服务端透明加密(TDE),需客户端自行加解密
  • 配置文件里用 jasypt 加密 password 值,只防配置泄露,不防 Redis 数据泄露

如何让 RedisTemplate 写入前自动加密?

核心是替换 RedisTemplate 的 defaultSerializer 或指定 value 序列化器,把加密逻辑嵌入序列化流程。推荐使用 AES 对称加密,配合固定 salt 和随机 IV 提升安全性。

  • 定义一个 AesRedisSerializer 类,实现 RedisSerializer
  • 加密时:生成随机 IvParameterSpec → 用 Cipher 加密字节数组 → 将 IV + 密文拼接为 byte[] 返回
  • 解密时:拆出前 16 字节为 IV → 用相同密钥和 IV 解密剩余部分
  • 注册该序列化器到 RedisTemplate:template.setValueSerializer(new AesRedisSerializer(key));
  • 注意:StringRedisTemplate 不适用此方案,它只处理字符串,需改用 RedisTemplate

加密 key 还是只加密 value?

通常只加密 value。key 加密会导致无法使用 Redis 命令(如 KEYS、SCAN、EXPIRE)管理缓存,且 key 本身常含业务语义(如 user:1001:profile),加密后运维排查困难。

Sentinal Redis
Sentinal Redis

监控Redis服务器健康状况、内存、性能及BullMQ队列。检查队列深度、失败任务,分析慢查询并诊断问题。

下载
  • key 明文 + value 密文 是平衡安全与可用性的常见做法
  • 若必须加密 key,需自定义 RedisCacheManager 的 cacheKeyPrefix 或重写 computeKey,但会失去 Spring Cache 注解(@Cacheable)的自动 key 生成能力
  • 避免对整个 byte[] key 做 AES 加密——Redis 内部 key 比较依赖字节序,加密可能破坏哈希分布

压缩 + 加密顺序怎么安排?

先压缩再加密。压缩能减少网络传输和内存占用,加密后再压缩几乎无效(加密后数据接近随机分布,不可压缩)。

  • 在 AesRedisSerializer 的 serialize() 方法里,先用 DeflaterOutputStream 压缩原始字节,再 AES 加密
  • 解密时逆序:先 AES 解密 → 再用 InflaterInputStream 解压
  • 注意压缩阈值:小对象(如短字符串)压缩反而增大体积,建议只对 >1KB 的 value 启用压缩
  • 不要用 GZIP,它有头部校验开销;Deflater(zlib)更轻量,且 Java 原生支持

真正难点不在代码实现,而在于密钥轮换和 IV 管理:IV 必须每次加密都随机生成并随密文持久化,密钥不能硬编码在代码里,应从 KMS 或环境变量注入。一旦密钥泄漏或失效,存量密文将无法解密——这是最容易被忽略、但后果最严重的环节。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2991

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

517

25

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4969

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4555

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

8872

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

683

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

776

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

9282

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1200

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go-Zero官方文档
Go-Zero官方文档

共0课时 | 0人学习