为了加强单向散列计算的安全性,还会给散列算法加点盐(salt), salt相当于加密的 密钥,增加破解的难度。
常用的单向散列算法有MD5、SHA等。单向散列算法还有一个特点就是输入的任何 微小变化都会导致输出的完全不同,这个特性有时也会被用来生成信息摘要、计算具有 高离散程度的随机数等用途。
2 对称加密
所谓对称加密是指加密和解密使用的密钥是同一个密钥(或者可以互相推算),如 图8.8所示。
对称加密通常用在信息需要安全交换或存储的场合,如Cookie加密、通信加密等。
对称加密的优点是算法简单,加解密效率高,系统开销小,适合对大量数据加密。 缺点是加解密使用同一个密钥,远程通信的情况下如何安全的交换密钥是个难题,如果 密钥丢失,那么所有的加密信息也就没有秘密可言了。
常用的对称加密算法有DES算发、RC算法等。对称加密是一种传统加密手段,也是 最常用的加密手段,适用于绝大多数需要加密的场合。
3 非对称加密
不同于对称加密,非对称加密和解密使用的密钥不是同一密钥,其中一个对外界公 开,被称作公钥,另一个只有所有者知道,被称作私钥。用公钥加密的信息必须用私钥 才能解开,反之,用私钥加密的信息只有用公钥才能解开,如图8.9所示。理论上说,不可能通过公钥计算获得私钥。
非对称加密技术通常用在信息安全传输,数字签名等场合。
信息发送者A通过公开渠道获得信息接收者B的公钥,对提交信息进行加密,然后 通过非安全传输通道将密文信息发送给B, B得到密文信息后,用自己的私钥对信息进行 解密,获得原始的明文信息。即使密文信息在传输过程中遭到窃取,窃取者没有解密密 钥也无法还原明文。
数字签名的过程则相反,签名者用自己的私钥对信息进行加密,然后发送给对方, 接收方用签名者的公钥对信息进行解密,获得原始明文信息,由于私钥只有签名者拥有, 因此该信息是不可抵赖的,具有签名的性质。
在实际应用中,常常会混合使用对称加密和非对称加密。先使用非对称加密技术对 对称密钥进行安全传输,然后使用对称加密技术进行信息加解密与交换。而有时,对同 一个数据两次使用非对称加密,可同时实现信息安全传输与数字签名的目的。
非对称加密的常用算法有RSA算法等。HTTPS传输住哪个浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。
4 密钥安全管理
前述的几种加密技术,能够达到安全保密效果的一个重要前提是密钥的安全。不管 是单向散列加密用到的salt、对称加密的密钥、还是非对称加密的私钥,一旦这些密钥泄 露出去,那么所有基于这些密钥加密的信息就失去了秘密性。
信息的安全是靠密钥保证的。但在实际中经常看到,有的工程师把密钥直接写在源 代码中,稍好一点的写在配置文件中,线上和开发环境配置不同的密钥。总之密钥本身 是以明文的方式保存,并且很多人可以接触到,至少在公司内部,密钥不是秘密。
实践中,改善密钥安全性的手段有两种。
一种方案是把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施, 对外提供加密和解密服务,应用系统通过调用这个服务,实现数据的加解密。由于密钥 和算法独立部署,由专人维护,使得密钥泄露的概率大大降低。但是这种方案成本较高, 而且有可能会成为应用的瓶颈,每次加密、解密都需要进行一次远程服务调用,系统性 能开销也较大。
另一种方案是将加解密算法放在应用系统中,密钥则放在独立服务器中,为了提高 密钥的安全性,实际存储时,密钥被切分成数片,加密后分别保存在不同存储介质中, 兼顾密钥安全性的同时又改善了性能,如图8.10所示。
应用程序调用密钥安全管理系统提供的加解密服务接口对信息进行加解密,该接口 实现了常用的加密解密算法并可根据需求任意扩展。加解密服务接口通过密钥服务器的 密钥服务取得加解密密钥,并缓存在本地(定时更新)。而密钥服务器中的密钥则来自多 个密钥存储服务器,一个密钥分片后存储在多个存储服务器中,每个服务器都有专人负 责管理。密钥申请者、密钥管理者、安全审核人员通过密钥管理控制台管理更新密钥, 每个人各司其事,没有人能查看完整的密钥信息。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Java)
2021年Java中高级面试必备知识点总结
在这个部分总结了2019年到目前为止Java常见面试问题,取其面试核心编写成这份文档笔记,从中分析面试官的心理,摸清面试官的“套路”,可以说搞定90%以上的Java中高级面试没一点难度。
本节总结的内容涵盖了:消息队列、Redis缓存、分库分表、读写分离、设计高并发系统、分布式系统、高可用系统、SpringCloud微服务架构等一系列互联网主流高级技术的知识点。
目录:
(上述只是一个整体目录大纲,每个点里面都有如下所示的详细内容,从面试问题——分析面试官心理——剖析面试题——完美解答的一个过程)
部分内容:
对于每一个做技术的来说,学习是不能停止的,小编把2019年到目前为止Java的核心知识提炼出来了,无论你现在是处于什么阶段,如你所见,这份文档的内容无论是对于你找面试工作还是提升技术广度深度都是完美的。
不想被后浪淘汰的话,赶紧搞起来吧,高清完整版一共是888页,需要的话可以点赞+关注
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
一共是888页,需要的话可以点赞+关注**
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!