• 对称加密算法简介和编程实践

    众所周知,加密算法是用来加密数据的,可以分为对称加密和非对称加密两种。很多人可能不知道非对称加密,但一定用过至少听过对称加密,因为对称加密就是大众眼中的加密。 本文简单介绍下对称加密算法的基本原理,并提供一些编程例子,讲解如何在程序中对数据进行加密。开始之前,我们先来了解几个概念: 加密前的原始数据,叫做 原文( original text ),或者 明文( plain text ); 加密后的不规则( scrambled )数据,通常叫做 密文( cipher text ); 加密所用的密码,通常叫做 密钥( secret key ); 对称加密算法最大的特点是,它只有一把密钥,加密和解密过程用的都是同一把密钥: 这也符合大众对加密算法的认知,用密码对数据进行加密之后,必须用同一个密码才能将数据解密出来。那么,对称加密算法都有哪些呢?哪些算法安全性比较高呢? AES ,高级加密标准,新一代加密算法标准,速度快,安全级别高; DES ,数据加密标准,速度较快,适用于加密大量数据,但安全性较弱; Blowfish ,使用变长密钥,运行速度很快,非专利算法,没有使用限制; etc 安全级别 ( Security Level ) 工作因素 ( Work Factor ) 算法 ( Algorithm ) 薄弱 ( Weak ) O(240) DES 传统 ( Legacy ) O(264) RC4 基准 ( Baseline ) O(280) 3DES 标准 ( Standard ) O(2128) AES-128 较高 ( High ) O(2192) AES-192 超高 ( Ultra ) O(2256) AES-256 根据安全性,对称加密算法应该优先选择 AES ,位数尽可能大,最好是 AES-256 。
    阅读全文
  • 密码加盐哈希,拖库也不怕

    任何系统通常都有用户,数据库因而少不了用户表,少不了要保存用户密码。那么,密码能明文保存吗?肯定不能!

    如果用户密码用明文保存,一旦数据库被拖库,用户密码就全泄露了呀!用户密码泄露可不是件小事,影响的也不仅仅是泄露站点,因为用户通常用同一个密码走天下!

    写到这不禁想起多年前发生的 CSDN 拖库事件,泄露了大量用户的密码,笔者的账号密码也在其中。顺便吐槽一下,CSDN 烂不是一天两天了,一个程序员交流网站竟然明文保存密码!

    当年我还年轻,好多网站的账号密码都是一样的。黑客拖库得到我的账号密码后,可以用它来登录我的 QQ ,我的邮箱,甚至是网银!想想就觉得可怕!

    阅读全文
  • HTTP协议简介

    Web 是互联网上最流行的应用,没有之一。Web 网站由 HTML 网页和相关资源组成,通过 Web 服务器对外服务。用户则通过浏览器连接 Web 服务器,浏览网页。

    世界上有成千上万的网站,而浏览器也是五花八门。浏览器 和 Web 服务器必须对如何请求和响应数据达成一致,否则就乱套了。这就是本文要讨论的 超文本传输协议hypertext transfer protocol ),即 HTTP 协议负责的范畴。

    HTTP 协议是一种应用层协议,它规定了参与 Web 通信的浏览器和 Web 服务器之间的通信细节。HTTP 协议主要用于传输超文本网页及其相关网络资源,其中

    • Web 浏览器browser )作为客户端,主动发起 请求request );
    • Web 服务器server )作为服务端,被动回复 响应response );
    阅读全文
  • TCP 报文段格式

    上一小节,我们简单介绍了 TCP 协议的基本机制,但很多细节还来不及展开。此时此刻,我们甚至对 TCP 的传输单元长啥样都一无所知。不过没关系,本节我们再接再厉,争取将它一举拿下!

    报文结构

    由于 TCP 协议位于传输层,它的传输单元一般叫做 TCP段segment ),也可译为 TCP分组 。当然了,也有不少文献将它笼统地称为 TCP报文

    那么,一个 TCP 报文段的格式到底是怎样的呢?它跟 UDP 数据报又有哪些异同呢?

    与 UDP 数据报一样,TCP 报文也分为头部和数据两个部分。所不同的是,TCP 报文头部要比 UDP 复杂很多:

    阅读全文
  • OSI参考模型

    为降低复杂度并提高灵活性,大型软件系统一般采用分层的思路进行设计。

    电商平台是一个典型的例子,后端可能分成数据库层、缓存层、业务逻辑层、接入层等等。每个层只专注于本层的处理逻辑,复杂性大大降低;各个层互相配合,共同完成复杂的业务处理。

    阅读全文
  • DNS服务器工作原理

    通过上节学习,我们初步掌握了域名系统的基本原理。通过域名访问网络服务时,需要先向 DNS 服务器查询域名对应的 IP 地址。那么,是不是所有域名都保存在一台服务器上呢?

    答案肯定是否定的。全球现有的域名数量是一个天文数字,不是一两台服务器就能保存的。实际上,DNS 服务器分为很多角色,形成了一个等级深严的分布式体系。

    本节,我们一起来扒一扒这背后的故事。

    阅读全文
  • 网络实验:观察ARP协议通信过程

    本节,我们用一个极简的局域网,来观察 ARP 协议的通信步骤,以此加深理解:

    实验环境由 Docker 容器提供,只需执行这个 docker 命令,即可一键启动:

    1
    
    docker run --name lan --rm -it --privileged --cap-add=NET_ADMIN --cap-add=SYS_ADMIN -v /data fasionchan/netbox:0.11 launch-netenv lan
    
    阅读全文
  • ping命令原理

    进行网络通信时,我们经常需要判断一台主机是否活跃。

    举个例子,alicebruce 进行通信之前,可以先 ping 一下他的 IP 地址 192.168.171.3 ,看主机是否有应答:

    阅读全文
  • 交流方式

    GitHub 本项目所有示例代码托管在 GitHub 上,仓库是: netcode 。 建议初学者亲自动手,将所有示例程序编写一遍,加深理解。 编程没有捷径 ,唯有带着 好奇心 探索程序背后的秘密,多动手勤练习,方能编写出你的理想世界。 如需与我们交流,也可以在在本项目中 新建一个Issue , 以这种形式进行讨论。 内容可以包括但不局限于: BUG 反馈 建议 提问 点击左边 Star 按钮,关注本项目。 对于后续任何更新,尽在掌握! 微信公众号 小菜学编程 我们维护了一个微信公众号—— 小菜学编程 ,欢迎扫二维码关注我们。 对于后续更新,我们会以公众号文章的形式进行推送,这是订阅我们内容的最佳渠道。 也欢迎通过公众号给我们留言,同样可以包括但不局限于: BUG 反馈 建议 提问 QQ交流群 我们维护了一个 QQ 群( 183196643 ),用于日常的交流讨论。 与 Linux 网络编程相关的话题,都可以在群里讨论,无须局限于本项目。 对于学习或者工作中遇到的疑难问题,欢迎到群里提问。 也欢迎各位热心老司机为新手们答疑解惑。 邮件 当然了,更书面的形式也支持,你可以给我们:发送邮件 。 【小菜学网络】系列文章首发于公众号【小菜学编程】,敬请关注:
  • 非对称加密算法简介及编程实践

    虽然对称加密算法可以胜任很多加密场景,但还是有不少特殊情况。 从前有一个黑帮,老大和手下们之间的通信必须加密确保安全。于此同时,老大希望手下发给他的信息,不能被其他手下知晓。若采用对称加密算法,只能给每个手下都分配一个独立的密钥,但老大觉得太麻烦了。该怎么办呢? 黑帮老大希望他只维护一份密钥,就能达到这样的效果,有办法做到吗? ——且看本文介绍的主角——非对称加密算法。 概念 既然我们平时所熟知的加密被称为对称加密,那么与之对应,就有 非对称加密( asymmetric encryption )。非对称加密,顾明思议,在加密和解密环节用的密钥是不同的。 如上图,非对称加密算法需要两把不同的密钥,这两把密钥组成一对: 公钥( public key ),公钥用来对数据进行 加密 ; 私钥( private key ),也称为 密钥( secret key ),用来对数据进行 解密 ; 公钥和私钥总是成对出现,用公钥加密后得到的密文,必须用对应的私钥才能解密; 这套加密机制完美解决了黑帮老大的难题,他只需要生成一对密钥:公钥分发给手下们,他们先用公钥加密信息,再发老大;老大接到密文,就用自己保管的私钥来解密;手下们就算拿到别人发的密文也解不开,因为私钥只有他们老大才有。 神奇的数学原理 您可能会觉得公钥和私钥的加密机制非常不可思议,这一切其实来一个神奇的数学原理。 我们来做一个数字游戏,您随便写下一个整数 m ( $1 \lt m \lt 7387$ ),然后计算 $m^3 \mod {7387}$ 并把结果告诉我,我就知道您写下的整数 m 是什么!不信我们来试试,假设您写下的整数是 123 : 1 2 3 # 用Python求123的3次方,再除以7387得到余数 >>> 123 ** 3 % 7387 6730 那么,我该如何通过结果 6730 还原出您写下的整数 123 呢?神奇的现象来了:
    阅读全文