ssh 22端口 账号密码登陆、证书登录
smtp 25端口 邮件协议
DNS 53
DHCP 67 68端口 四个包
1.DHCP服务器:服务器管理IP地址池和配置参数
2.客户端请求:发送DHCP广播请求,discover消息
3.DHCP服务器回应:收到discover会回复offer信息(包含可用IP和配置信息)
4.客户端选择:收到多个offer后,选择其中一个将offer的源地址发给服务器(request消息)
5.服务器确认收到:收到request后,向用户端发送acknowledgment消息
6.客户端配置
http 80 三次握手
pop3 110 邮件协议
https 443
ladp 389 域控制器
mysql 3306
SQL server 1433 C#
mogodb 27017
redis 6379
oracle 1521 数据库
Windows远程登陆 3389
Flask 是一种流行的 Python Web 框架,用于构建简单而强大的 Web 应用程序。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Flask!"
if __name__ == '__main__':
app.run()
创建了一个名为 app
的 Flask 应用程序对象,并使用 @app.route()
装饰器定义了一个路由 /
,它将返回 "Hello, Flask!"。最后,通过调用 app.run()
方法来运行应用程序。
运行应用程序时,可以在命令行中执行 Python 文件,或者直接在集成开发环境(IDE)中点击运行按钮。Flask 将启动一个开发服务器,并监听默认端口 5000。打开浏览器并访问 http://localhost:5000
,即可看到 "Hello, Flask!" 的输出。
编码
HTML编码:也称实体编码
1.对于待编码的字符,在 HTML 中找到对应的实体名称或字符引用。
2.将原字符替换为对应的实体名称或字符引用。
实体名称(entity name)使用 & 符号作为前缀和 ; 符号作为后缀,形式为 &entity_name;。例如,小于号 < 的实体名称为 <,引号 " 的实体名称为 "。
字符引用(character reference)使用十进制或十六进制数来表示字符的 Unicode 编码,形式为 &#decimal_number; 或 &#xhexadecimal_number;。例如,小于号 < 的字符引用可以是 < 或 <。
以下是一些常见的特殊字符及其对应的实体名称和字符引用:
<:实体名称 <,字符引用 < 或 <
>:实体名称 >,字符引用 > 或 >
":实体名称 ",字符引用 " 或 "
':实体名称 ',字符引用 ' 或 '
&:实体名称 &,字符引用 & 或 &
通过 HTML 编码,特殊字符可以被正确显示在网页上,而不会与 HTML 标签冲突或产生解析错误。这对于防止跨站脚本攻击(XSS)等安全威胁具有重要作用。
需要注意的是,除了特殊字符外,很多情况下并不需要对常规的英文字母、数字和一些符号进行 HTML 编码。只有在确保特殊字符不会引起混淆或解析错误时才需要进行编码处理。
当处理 HTML 数据时,我们可以使用编码和解码函数来进行相应的转换操作。例如,在 JavaScript 中,可以使用 innerHTML 属性或 textContent 属性来设置或获取 HTML 文本,浏览器会自动处理 HTML 编码和解码的过程。此外,还有一些编程语言和框架提供了专门的函数或工具库来处理 HTML 编码和解码,以简化开发过程。
URL 编码:
是一种用于在 URL 中表示特殊字符的编码方式,也被称为百分号编码(percent encoding)。它通过将特殊字符转换为特定的编码形式,以避免与 URL 结构冲突或引起解析错误。
URL 编码的规则很简单:将特殊字符替换为 % 符号后跟两位十六进制数。具体的编码过程如下:
1.对于待编码的字符,检查其 ASCII 码值。
2.将 ASCII 码值转换为两位十六进制数。
3.在原字符前加上 % 符号,并用两位十六进制数表示的值替换原字符。
例如,假设有一个包含特殊字符的 URL:https://example.com/search?q=hello world!。我们要对其中的特殊字符进行编码。
1.空格字符 " " 的 ASCII 码值为 32,转换为十六进制为 20。所以,空格字符被编码为 %20。
2.惊叹号字符 "!" 的 ASCII 码值为 33,转换为十六进制为 21。所以,惊叹号字符被编码为 %21。
最终编码后的 URL 为:https://example.com/search?q=hello%20world%21。这样,URL 就不会因为特殊字符而导致解析错误。
URL 编码常用于处理 URL 参数或表单数据的安全传输问题。它确保了特殊字符被正确解释,并且可以防止 URL 注入攻击或使 URL 格式无效。当处理含有特殊字符的 URL 数据时,通常会调用编码和解码函数(如 JavaScript 的 encodeURIComponent() 和 decodeURIComponent() 函数)来进行相应的处理。
需要注意的是,URL 编码并不对所有字符进行编码,只对特殊字符进行编码,例如空格、问号、等号等。其他常规的英文字母、数字和一些符号不会被编码。同时,URL 编码只能确保 URL 的完整性和有效性,并不能提供真正的安全性。在涉及到数据机密性的场景下,还需要使用其他加密手段来保护数据的安全传输。
加密传输协议(Transport Layer Security,TLS)
是一种用于保护网络通信安全的协议。TLS 旨在通过提供加密、数据完整性和身份认证等特性,确保在互联网上传输的数据得到保护,不被未经授权的访问或篡改。
TLS 是一种协议套件,其基于 SSL(Secure Sockets Layer)协议演变而来。目前,TLS 的最新版本为 TLS 1.3,它在安全性和性能方面都有一定的改进。
TLS 的主要特性包括:
-
数据加密:TLS 使用对称密钥加密和非对称密钥加密相结合的方式,用于加密在网络上传输的数据。对称密钥加密用于实际数据的加密和解密,而非对称密钥加密用于在通信开始时建立安全连接和交换对称密钥。
-
数据完整性:TLS 使用消息认证码(Message Authentication Code,MAC)来保证数据完整性。MAC 是在加密数据的基础上计算的校验值,并与数据一起传输,以便接收方验证数据在传输过程中是否被篡改。
-
身份认证:TLS 通过使用数字证书进行身份认证,确保通信双方的身份是可信的。服务器端必须具有有效的数字证书进行身份验证,而客户端可以选择进行身份验证或不验证。
-
前向保密:TLS 1.3 引入了前向保密(Forward Secrecy)的概念。它确保即使长期的私钥被泄露,先前的通信仍然是安全的。每次建立连接时,都会生成新的临时密钥用于数据加密,提高了安全性。
-
握手过程:在建立 TLS 连接之前,客户端和服务器之间需要进行握手过程来协商加密算法、建立安全连接等。该过程包括互相验证身份、协商加密算法版本和密钥等重要信息。
TLS 在保护各种网络通信中扮演着重要角色,特别是在涉及敏感数据传输的场景下,如网上银行、电子商务、电子邮件等。它提供了一种标准化的安全通信机制,利用密码学和协议规范来确保通信的机密性、完整性和可信性。
需要注意的是,TLS 只保护数据在网络传输过程中的安全性,而不解决应用程序本身的安全问题。因此,在实现安全通信时,还需要结合其他安全控制措施,如访问控制、身份认证和数据加密等。同时,使用更新的 TLS 版本,并及时应用安全补丁,以防止已知的漏洞和攻击。
MD5(Message Digest Algorithm 5)和 SHA(Secure Hash Algorithm)
都是常见的哈希算法,用于对数据进行加密和生成摘要(散列值)。
MD5 加密: MD5 是一种广泛使用的哈希算法,生成的摘要长度为 128 位。然而,由于其已被证明存在一些安全性问题,不再推荐用于加密敏感数据。在许多编程语言中,都有内置的函数或库可以计算 MD5 哈希值。以下是一个示例,演示如何使用 Python 进行 MD5 加密:
import hashlib
def md5_encrypt(data):
md5 = hashlib.md5()
md5.update(data.encode('utf-8'))
return md5.hexdigest()
plaintext = "Hello, world!"
encrypted = md5_encrypt(plaintext)
print("MD5 encrypted value:", encrypted)
2.SHA 加密: SHA 是一系列安全哈希算法,包括 SHA-1、SHA-256、SHA-384、SHA-512 等。SHA-256 是最常用的 SHA 算法之一,它生成的摘要长度为 256 位。相较于 MD5,SHA 算法提供了更高的安全性和抵抗碰撞的能力。以下是一个示例,演示如何使用 Python 进行 SHA-256 加密:
import hashlib
def sha256_encrypt(data):
sha256 = hashlib.sha256()
sha256.update(data.encode('utf-8'))
return sha256.hexdigest()
plaintext = "Hello, world!"
encrypted = sha256_encrypt(plaintext)
print("SHA-256 encrypted value:", encrypted)
Base64 编码
是一种将二进制数据转换为可打印字符的编码方式。它常用于在文本协议中传输或存储二进制数据,例如在电子邮件中传输附件或在网页中嵌入图像。
Base64 编码使用了 64 个字符来表示所有可能的 6 位组合。这些字符包括 A-Z(大小写敏感)、a-z、0-9 和两个特殊字符 "+" 和 "/"。另外,还可能包含一个填充字符 "=",用于确保编码后的数据长度为 4 的倍数。
Base64 编码的主要特点如下:
-
可读性:Base64 编码后的数据由可见字符组成,因此可以在各种文本系统中正确地表示和传输,而不会出现乱码或非法字符。
-
扩展性:Base64 编码适用于各种二进制数据,包括文本、图像、音频、视频等。通过编码,可以将这些数据转换为文本格式,方便传输和处理。
-
增加数据大小:Base64 编码会增加数据的大小。编码后的数据通常比原始数据大约 1/3,并且长度总是 4 的倍数。这是因为每 3 个字节的数据会被编码为 4 个字符。
Base64 编码的原理是将 3 个字节的数据分为 4 个 6 位的组,并将每个组转换为对应的可打印字符。如果原始数据不足 3 个字节,Base64 编码会使用填充字符 "=" 补齐。
以下是一个示例,演示如何使用 Python 进行 Base64 编码和解码:
import base64
# 编码
data = b'Hello, world!' # 使用字节串作为输入数据
encoded_data = base64.b64encode(data)
print("Base64 encoded data:", encoded_data)
# 解码
decoded_data = base64.b64decode(encoded_data)
print("Base64 decoded data:", decoded_data.decode('utf-8'))