五分钟通俗易懂的数据加密介绍

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 54w+ 字,讲解图 2476+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 1900+ 小伙伴加入学习 ,欢迎点击围观

数据加密已成为安全的一个非常重要的方面。用户期望您的应用程序具有高标准的安全性。用户数据对您的企业来说是无价的资产,如果不充分了解用户、他们与企业的关系以及他们的偏好,今天的应用程序就无法提供最佳的用户体验。另一方面,如果您的行为负责任,用户现在甚至更愿意与您分享相关信息以获得更好的体验。这里有一篇通俗易懂的文章,可以帮助您入门。

知道什么 不是 加密

加密、编码和散列很容易混淆。通常即使是善意的开发人员也会构建糟糕的安全实现,因为他们很匆忙并且他们认为他们已经大致弄清楚了。

1.编码不是加密。仅仅因为某些东西在文本板中看起来不可读并不意味着它已加密。 Base64 不是加密。

2.散列不是加密。这是完全不同的野兽。通常,即使是合法用户也无法在散列后取回数据。它主要是一个单向过程(唯一的例外是当你散列像密码这样的微小数据时……在这种情况下,有可能从散列中找出数据。)。因此,MD5 和 SHA 不符合加密条件。

什么是加密

加密是使用秘密/密码以只有具有相同密码的人才能将其恢复为原始形式的方式转换数据。这里的问题是发件人首先需要知道您的密码才能发送数据! (我们不赞成与客户端应用程序共享密码)。

一个更好的变体是使用公钥以只有匹配的私钥/秘密密钥才能将其恢复为原始形式的方式转换数据。

通常的陷阱

即使在“了解”什么是加密之后,我们也倾向于认为我们可以通过对正在发生的事情有一点模糊的理解而逃脱。需要考虑整个过程并确保它是可靠的。

  1. 握手很重要:交换密钥的初始握手很重要。考虑清楚。不要假设您可以在那里留下一个漏洞,而黑客会“错过”那个漏洞。这是有人会看到的第一个地方。除非握手可靠,否则公钥加密本身不会拯救你。

  2. 不要试图重新发明轮子:寻找执行常规操作的既定方法。登录、会话管理、注销、数据传输等都有既定的做法。

  3. 保持简单和可靠:不要产生不必要的开销和加密层。例如,如果您在服务器上正确配置了 HTTPS,这将比糟糕的 HTTPS 配置和在顶部为您的数据设置一个完整的其他加密过程要安全得多。

首先避免发送/接收数据

如果您正在阅读这篇文章,您可能已经决定需要对传输中的数据进行加密。但也许你还没有做出那个决定。

这是您在一开始就应该考虑的事情......传输中的数据加密必须始终是最后的手段 - 无一例外。除非绝对不可避免,否则不要传输任何数据(不要相信客户端会保密数据)。不要接受任何您可以自己得出的计算值(不要接受客户的任何帮助)。

总而言之,通过最小化练习并确定必须传输的最低限度数据。在通信通道上寻找现有的加密支持,这可以通过配置启用,如果可用,请使用这样的选项。如果没有这样的选项可用,请谨慎设计加密过程,同时避免常见的陷阱。


延伸阅读:

1. 编码 vs. 加密 vs. 散列

2. 公钥密码学