+++
pre = "<b>3.6. </b>"
title = "数据加密"
weight = 6
chapter = true
+++

## 背景

安全控制一直是治理的重要环节，数据加密属于安全控制的范畴。无论对互联网公司还是传统行业来说，数据安全一直是极为重视和敏感的话题。
数据加密是指对某些敏感信息通过加密规则进行数据的变形，实现敏感隐私数据的可靠保护。
涉及客户安全数据或者一些商业性敏感数据，如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定，都需要进行数据加密。

对于数据加密的需求，在现实的业务场景中一般分为两种情况：

1. 新业务上线，安全部门规定需将涉及用户敏感信息，例如银行、手机号码等进行加密后存储到数据库，在使用的时候再进行解密处理。因为是全新系统，因而没有存量数据清洗问题，所以实现相对简单。

2. 已上线业务，之前一直将明文存储在数据库中。相关部门突然需要对已上线业务进行加密整改。这种场景一般需要处理 3 个问题：

* 历史数据需要如何进行加密处理，即洗数。
* 如何能在不改动业务SQL和逻辑情况下，将新增数据进行加密处理，并存储到数据库；在使用时，再进行解密取出。
* 如何较为安全、无缝、透明化地实现业务系统在明文与密文数据间的迁移。
   
## 挑战

在真实业务场景中，相关业务开发团队则往往需要针对公司安全部门需求，自行实行并维护一套加解密系统。
而当加密场景发生改变时，自行维护的加密系统往往又面临着重构或修改风险。
此外，对于已经上线的业务，在不修改业务逻辑和 SQL 的情况下，透明化、安全低风险地实现无缝进行加密改造也相对复杂。

## 目标

**根据业界对加密的需求及业务改造痛点，提供了一套完整、安全、透明化、低改造成本的数据加密整合解决方案，是Apache ShardingSphere 数据加密模块的主要设计目标。**
