热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

通信安全--对称加密与非对称加密的基本概念唐风思琪

以前我们还只是聊聊QQ,看看网页,通信安全似乎并不为人所重视,而现如今电子商务已经极为普及,我们在网上的生活也已经非常丰富和重要,因此对帐户的安全,信息的保密便越来越重视。对信息进

通信安全 -- 对称加密与非对称加密的基本概念

以前我们还只是聊聊QQ,看看网页,通信安全似乎并不为人所重视,而现如今电子商务已经极为普及,我们在网上的生活也已经非常丰富和重要,因此对帐户的安全,信息的保密便越来越重视。对信息进行加密是保证通信安全的最为基本也是最为重要的手段之一。最近的项目正好涉及到通信安全相关的内容,所以也学习一些入门的基本知识。

基本概念

明文就是我们真正想要通信的信息,这些信息要不就是人类可读的,要不就是有明显意义,容易理解的。在电子通信的过程中,无论是有线还是无线的方式,数据通过各种媒介到达对方的过程中很容易就可以被别人获取到。如果对于我们发送的信息不加任何变化,那么对方获取到之后不费力就可以完全了解了通信的内容(比如我们的帐户和密码,还有你和MM聊的那些肉麻的话)。为了防止自己的信息完全裸露在别人面前,就需要对信息进行加密。加密就是把明文以某种方式变换成一堆看起来乱七八糟的数据--密文,再把密文发给对方,对方收到之后,用对应的方法再用相应的方法再数据还原成明文(解密)。对信息进行加密的步骤就是加密算法。

有些算法本身,除了要输入明文之外,还需要输入另一个专门的数据(密钥)才能输出密文。现代的加密系统,一般都由加密算法和密钥组成。没有密钥的加密系统也是有的,但保密性和实用性相对来说比较差。比如一旦组织中有人离开,那么所有人都要更换加密算法,否则安全性就无法保证了。而带密钥的加密系统解决了这个问题。因为即使算法公开,没有密钥也无法解密密文信息,而密钥的更换比算法的更换要容易得多。

什么是非对称加密算法?为什么需要非对称加密算法?

带密钥的加密算法一般分为两类:对称加密算法和非对称加密算法。

对称加密算法是指加密和解密使用相同,或是关连性很强的密钥。对称加密算法速度比较快,比较适合在大量数据加密的情况下使用。但对称加密要求通信双方能共享同一密钥,并对密钥进行严格地保护,否则密钥泄漏了,信息就被破解了。但在互联网的环境下,要达到这个要求是很难的。因为通信的对象多种多样,几乎不可能做到方便地共享同一密钥而不为人知。因为毕竟通信的双方很可能之前完全没有见接触过,是第一次通信,而他们的通信信息又希望被加密,比如我第一次登录亚马逊的网站买东西,那么如何与亚马逊共享同一密钥来保证我的帐户和密码的安全呢?对密钥本身已经无法加密了(对方根本无法解密)。把密钥发给对方,那就相当于也把密钥告诉了窃听者。所以共享密钥,同时对密钥严格保护,在现实中是非常困难的。

为了解决对称加密算法的问题,牛X的人发明了非对称加密算法。在非对称加密算法中,存在两个密钥。一个是加密密钥(e),一个解密密钥(d)。通过 e 对明文加密得到的密文,只有用 d 来解密出来还原成明文。而且算法本身可以保证,就算你知道 e ,想要得到 d 也是非常非常困难的。既然有这种特性,那么我们就可以这样做:我把加密密钥公布出去(发给通信的对方 A)。A 收到密钥 e 以后,用 e 对他要发送的信息(M)进行加密得到密文 C 发送给我,我再使用解密密钥 d 把密文解密,还原成 M。在这个过程中,我并不担心第三方的窃听者窃听我们的通信过程,因为就算他有了 e,也无法使用 e 来解密 C。除了解密密钥 d 的拥有者(我)之外,谁都无法解密。这样,我只要保证 d 的只有我知道(这个相对容易做到),就可以保证通信的安全。

不过,这世上没有彻头彻尾的绝望,也没有十全十美的事情。非对称加密算法一般都比较慢,需要耗费比较多的计算时间,并不适合用在大量的数据加密上。为了保证安全性,同时又降低计算上的需求,一般的通信应用都会结合使用对称加密算法和非对称加密算法。即,在通信的开始,先用非对称加密算法交换对称加密算法的密钥,之后再用对称加密算法进行通信。

image

后面的博文中将会陆续学习一些非对称加密和对称加密和算法。


推荐阅读
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 无线认证设置故障排除方法及注意事项
    本文介绍了解决无线认证设置故障的方法和注意事项,包括检查无线路由器工作状态、关闭手机休眠状态下的网络设置、重启路由器、更改认证类型、恢复出厂设置和手机网络设置等。通过这些方法,可以解决无线认证设置可能出现的问题,确保无线网络正常连接和上网。同时,还提供了一些注意事项,以便用户在进行无线认证设置时能够正确操作。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
UPI
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有