Java 业务开发常见错误 100 例
朱晔
贝壳金服资深架构师
52944 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
代码篇 (23讲)
Java 业务开发常见错误 100 例
15
15
1.0x
00:00/00:00
登录|注册

30 | 如何正确保存和传输敏感数据?

公钥密码算法
AES是比较安全的对称加密算法
DES不安全
权威性
完整性
机密性
TLS握手
TCP握手
推荐使用独立的加密服务来管控密钥
不要在代码中写死一个固定的密钥和初始化向量
非对称加密算法
对称加密算法
BCrypt比MD5慢很多
使用BCryptPasswordEncoder
盐最好是全球唯一的
盐需要有一定的长度
MD5容易被破解
MD5是单向的
不保存用户密码
HTTPS双向认证
日志脱敏
HTTPS TLS 1.2连接(RSA握手)的整个过程
HTTPS的目的
HTTPS连接的过程
HTTPS=SSL/TLS+HTTP
实践
对称加密和非对称加密算法
使用慢一点的算法
加盐
MD5不安全
不保存原始密码
思考与讨论
HTTPS
保存姓名和身份证
保存用户密码
怎样保存和传输敏感数据

该思维导图由 AI 生成,仅供参考

你好,我是朱晔。
今天,我们从安全角度来聊聊用户名、密码、身份证等敏感信息,应该怎么保存和传输。同时,你还可以进一步复习加密算法中的散列、对称加密和非对称加密算法,以及 HTTPS 等相关知识。

应该怎样保存用户密码?

最敏感的数据恐怕就是用户的密码了。黑客一旦窃取了用户密码,或许就可以登录进用户的账号,消耗其资产、发布不良信息等;更可怕的是,有些用户至始至终都是使用一套密码,密码一旦泄露,就可以被黑客用来登录全网。
为了防止密码泄露,最重要的原则是不要保存用户密码。你可能会觉得很好笑,不保存用户密码,之后用户登录的时候怎么验证?其实,我指的是不保存原始密码,这样即使拖库也不会泄露用户密码。
我经常会听到大家说,不要明文保存用户密码,应该把密码通过 MD5 加密后保存。这的确是一个正确的方向,但这个说法并不准确。
首先,MD5 其实不是真正的加密算法。所谓加密算法,是可以使用密钥把明文加密为密文,随后还可以使用密钥解密出明文,是双向的。
而 MD5 是散列、哈希算法或者摘要算法。不管多长的数据,使用 MD5 运算后得到的都是固定长度的摘要信息或指纹信息,无法再解密为原始数据。所以,MD5 是单向的。最重要的是,仅仅使用 MD5 对密码进行摘要,并不安全
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了网络安全中敏感数据的安全保存和传输的重要性,重点介绍了密码加密算法在网络安全中的关键作用。首先指出了MD5加密算法易受彩虹表攻击的局限性,并详细讨论了盐的使用以加强密码安全性,介绍了BCrypt算法相对于MD5算法的优势。此外,还介绍了对称加密和非对称加密算法,并推荐了AES算法作为比较安全、兼顾性能的对称加密算法。对于加密模式,文章提到了ECB和CBC模式,并强调了CBC模式的优越性。最后,给出了一些实践建议,包括不在代码中写死固定的密钥和初始化向量,推荐使用独立的加密服务来管控密钥等。 文章还介绍了HTTPS协议的重要性,以及TLS握手的整个过程,强调了使用SSL/TLS进行数据传输的必要性。通过对HTTPS的流程和TLS握手的详细解释,读者可以更好地理解各种加密算法的区别,以及证书的意义。 总的来说,本文通过深入浅出的方式介绍了密码安全保存和传输的实用技术知识,以及如何建立完善的安全防御机制来保护敏感数据。读者可以从中了解到密码加密算法的关键作用,以及HTTPS协议和TLS握手的重要性,为网络安全提供了有益的指导和建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 业务开发常见错误 100 例》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

  • 最新
  • 精选
  • 大胖子呀、
    老师说不能直接对密码进行md5加密,那我心想可以加盐,老师又说盐不要写死,我又想可以用用户名作为盐,接着老师就又说不建议用用户名做盐,应该uuid生成,我就想那保存到数据库不也可以被黑客获取到吗?最后老师又说:有的同学可能又要问了…… 可恶啊,这些都在你的计算当中啊!

    作者回复: 哈哈

    2020-05-26
    4
    39
  • 那时刻
    1.关于日志脱敏,可以在日志处理模块里通过正则表达式对于敏感词比如username匹配后,做模糊字符输出到日志里。 2.https双向认证指的是服务器额外校验客户端证书,方便控制某个接口是否允许客户端访问,用于第三方服务调用。流程上多了客户端提交自己证书和服务器校验证书等步骤。 小伙伴们讨论的云平台使用的secretid和secrestkey。云平台更推荐使用临时的IAM来替代吧。

    作者回复: 嗯,对于logback可以直接实现一个MessageConverter来做脱敏,脱敏的方式可以是屏蔽敏感信息的几位,或者是对敏感信息进行加密输出。

    2020-05-26
    15
  • 👽
    敏感数据的话,其实还有一个: 就是第三方的一些验证数据。类似于阿里云的Id和key。 我未进行加密保存在配置文件中,并且还将其上传在了GitHub上,按理说,如果Github泄露了,任何人都可以调用我的资源了。因为是透支额度设置的很低,而且余额只有10¥,所以未作安全处理。因为最坏的结果,也就是把我余额全用完。 1,如果需要涉及到加密,我会考虑到分开存储: 可能ID存数据库,Key存本地文件。(鸡蛋分在多个篮子里存放,脱库或者服务器被黑,也只有一部分数据泄露,依然无法使用我的服务) 2,然后加密存放,因为调用服务需要读取,所以必须是可逆的加密算法。增加破译的成本。 3,定期监控,出问题及时发现。

    作者回复: 大家也可以继续探讨一下 SecretID和SecretKey应该怎么保存

    2020-05-26
    4
    6
  • 旅途
    老师 密码使用对称加密或非对称加密不行吗 使用自己的算法进行加密 别人也破解不了

    作者回复: 不行 源码也泄露了呢

    2020-05-26
    3
    5
  • Joker
    关于彩虹表的解释在这里:https://www.zhihu.com/question/19790488,简单想象成一个黑盒吧,你传进加密后的密码,就能得到解密后的密码。但是构造这黑盒的过程就比较麻烦了。但是如果密文都是根据一个字符串根据特定的规则得到的字符串,哪怕是根据用户信息来构造一个盐,那么就有很大的概率出现,构造了一个彩虹表就把整个数据库的密码给解密了的情况。构造彩虹表的过程虽然麻烦,却是一劳永逸的,那么就要想一个不那么一劳永逸的方法,所以就出现了每次都用一个随机盐的方式。 因为如果是固定的盐的话,那么黑客得到一套数据库之后,只要构造一套彩虹表就能得到结果了。如果每次的盐都不同,那么黑客就要每次都根据密文和盐构造一套彩虹表。 我就是这么理解的,不知道是否正确。密码学真的难。

    作者回复: 差不多

    2020-05-28
    3
  • J.Smile
    记得一次面试,别人问我https的原理,其实我是理解的,但是记不住这个过程,怎么办?😂

    作者回复: 自己画一遍流程图

    2020-05-27
    3
  • Geek
    老师好,保护用户二要素AAD在实际会用在哪些场景中,是否用户忘记了自己设置的AAD就没办法类似于重置密码的方式找回AAD了,也就没办法再解密信息?

    作者回复: 不是找回密码的场景,所谓找回密码是重置密码,这里演示的是保护需要用户授权才能获取的重要信息

    2020-05-31
    2
    2
  • 👽
    我的理解,没有绝对的安全。现有的一切加密安全措施,其实只是增加破解的难度罢了。真正的安全,还是需要验证码之类的动态验证。 我一直以来,理解的加密就分两种:可逆的,不可逆的。 可逆的:规定了一种规律,只要应用这种规律就可以逆推其原始值。我认为其实雪花算法就是可逆的加密算法。知道其运算规律,也可以逆推其创建时间。虽然明文中无法体现其创建时间。 不可逆的:自己的密码是12,加密后是3,已知了算法是所有数位之和,但是并无逆推出原始数值是111,003,03,102......等。 但是,无论可逆还是不可逆,破解也是寻找其规律罢了。加密其实本质也是,对结果附加运算过程。 原始密码 x+a-b*c?d = 密文x1,在足够多的数据样本的时候,我觉得还是可以逆推出原始数据。(解方程嘛。。。) 我觉得,现在的密码加密,维持个三五年之后,也会被轻易破解。 其实要是简单粗暴一点,就手机验证码登录,就已经基本OK了,大平台似乎也都是这么做的。类似于某里云。在一些不太重要的数据,就处理的可以适当放开一些。

    作者回复: 其实深度学习就是通过大量样本寻找y=f(x)中的函数f,我们想一下,是否有可能通过深度学习来解密/获得密钥呢?

    2020-05-26
    3
    2
  • Bill陈锋
    秘钥读mi4yue4 听着太难受了

    作者回复: 《现代汉语词典(第7版)》:【密钥】mìyuè (口语中多读mìyào)即官方承认的口语通行读法。这种情况很常见,如“喜马拉雅”,口语中“喜”常读第一声,“拉”基本都读第二声(B站上的“喜马拉雅”广告)。其中一部分口语通行读法已经收入《现汉》,如“一会儿”,“会”是第四声,口语里多读第三声。 作者:知乎用户 链接:https://www.zhihu.com/question/34453962/answer/271618924 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    2023-09-02归属地:广东
    1
  • 汝林外史
    老师,一般的http访问登录,是不是密码加密需要在客户端做,如果不加密传给服务端的话,那密码不就暴露出来,通过浏览器工具是不是就可以看到form提交的数据?

    作者回复: 客户端做有啥用呢,密钥放哪里,走 HTTPS,要求再高点走 activex 控件

    2021-01-28
    1
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部