# python-network-security **Repository Path**: jiao001/python-network-security ## Basic Information - **Project Name**: python-network-security - **Description**: 网络安全编程实验(经典加密、DES、RSA、数字签名) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-01 - **Last Updated**: 2026-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 网络安全编程实验 本项目包含网络安全相关的编程实验,涵盖经典加密算法、DES 对称加密、RSA 非对称加密及数字签名实现。 ## 项目简介 四个递进式加密实验,从经典置换密码到现代非对称加密,帮助理解密码学基本原理和安全实现方法。 ## 技术栈 | 类别 | 技术/库 | 说明 | |------|---------|------| | 开发语言 | Python | 3.x | | 加密库 | PyCryptodome | 现代加密算法实现 | | 编码标准 | base64 / hashlib | 编码与哈希 | | 数学工具 | random / math | 随机数与数学运算 | ## 实验列表 | 实验 | 文件 | 内容 | |------|------|------| | 实验 1 | exp1_classic.py | 经典加密算法(凯撒密码、替换密码、栅栏密码、维吉尼亚密码) | | 实验 2 | exp2_des.py | DES 对称加密与解密(ECB/CBC 模式) | | 实验 3 | exp3_rsa.py | RSA 非对称加密与解密(公钥加密、私钥解密) | | 实验 4 | exp4_rsa_sign.py | RSA 数字签名与验证(私钥签名、公钥验签) | ## 环境配置 ```bash pip install pycryptodome ``` ## 快速开始 ```bash # 经典加密实验 python exp1_classic.py # DES 对称加密 python exp2_des.py # RSA 非对称加密 python exp3_rsa.py # RSA 数字签名 python exp4_rsa_sign.py ``` ## 各实验说明 ### 实验 1 - 经典加密算法 实现四种经典加密算法,理解加密基本思想: | 算法 | 原理 | 示例 | |------|------|------| | 凯撒密码 | 字母位移固定位数 | A→C (位移2) | | 单表替换密码 | 字母映射到另一个字母表 | A→K, B→D... | | 栅栏密码 | 按行写入按列读出明文 | 明文→矩阵→密文 | | 维吉尼亚密码 | 多表替换,密钥决定位移序列 | 密钥为单词时不同字母位移不同 | ### 实验 2 - DES 对称加密 使用 PyCryptodome 实现 DES 加解密流程: - **密钥长度**: 8 字节(64 位,有效 56 位) - **分组模式**: ECB(电子密码本)、CBC(密码分组链接) - **填充方式**: PKCS7 - **应用场景**: 对称加密,加解密同一密钥 ```python from Crypto.Cipher import DES from Crypto.Util.Padding import pad, unpad key = b'secret12' # 8字节密钥 cipher = DES.new(key, DES.MODE_ECB) encrypted = cipher.encrypt(pad(b'hello world', 8)) decrypted = unpad(cipher.decrypt(encrypted), 8) ``` ### 实验 3 - RSA 非对称加密 RSA 密钥生成、加密、解密完整流程: - **密钥长度**: 2048 位(生产环境建议 4096 位) - **公钥加密**: 用公钥加密,私钥解密 - **密钥对**: 使用 `Crypto.PublicKey.RSA` 生成 ```python from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5 from Crypto.Random import get_random_bytes key = RSA.generate(2048) cipher = PKCS1_v1_5.new(key.publickey()) encrypted = cipher.encrypt(b'secret message') ``` ### 实验 4 - RSA 数字签名 基于 RSA 的身份认证实现: - **签名流程**: 私钥生成签名 → 公钥验证签名 - **哈希算法**: SHA-256 - **应用场景**: 确保消息完整性、身份认证 ```python from Crypto.Signature import pkcs1_15 from Crypto.Hash import SHA256 hash_obj = SHA256.new(b'document content') signer = pkcs1_15.new(key) signature = signer.sign(hash_obj) # 验证 verifier = pkcs1_15.new(key.publickey()) verifier.verify(hash_obj, signature) # 不抛异常即验证通过 ``` ## 密码学知识要点 ### 对称加密 vs 非对称加密 | 特性 | 对称加密 | 非对称加密 | |------|----------|------------| | 密钥 | 同一密钥加解密 | 公钥加密、私钥解密 | | 速度 | 快(DES/AES) | 慢(RSA) | | 密钥分发 | 困难 | 容易(公开公钥) | | 用途 | 大量数据加密 | 密钥交换、数字签名 | ### 数字签名流程 ``` 发送方: 消息 → 哈希(SHA256) → 私钥加密 → 数字签名 接收方: 消息 → 哈希(SHA256) ← 公钥解密 ← 数字签名 比较两个哈希值是否一致 ``` ## 安全建议 ⚠️ **本项目仅用于教学目的,生产环境请使用以下标准库**: - 对称加密: AES-256-GCM - 非对称加密: RSA-3072+ / ECC - 哈希: SHA-256 / SHA-3 - 密码存储: bcrypt / Argon2