# CryptographyLabs
**Repository Path**: Hmount/cryptography-labs
## Basic Information
- **Project Name**: CryptographyLabs
- **Description**: 密码学实验学习.
- **Primary Language**: Python
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 0
- **Created**: 2022-09-19
- **Last Updated**: 2022-10-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Python, 密码学, C语言
## README
# 实验一、python-AES模块实现
### 功能介绍
这个模块提供了一些方法进行AES128的加密和解密
**目标**支持多种工作模式和填充
**当前支持的工作模式:ECB**
**当前支持的填充方式:None (意味着目前的输入字节长度只能是16的整数倍)**
**(实验一要求的功能已完成)**
加密和解密结果均支持以 **文本、hex、二维矩阵**格式输出
**这个模块完全使用python原生库实现,无需安装第三方库**
### 目录结构
```
./AES128/Python3
├── __pycache__ # python字节码保存目录
├── AES.py # AES分组管理、模式管理及运算
├── AK.py # 计算轮密钥
├── MC.py # (逆)列混淆
├── NS.py # (逆)字节代换
├── SR.py # (逆)行变换
└── main.py # 加密解密展示、AES类使用示例
```
# 实验二、 python-RSA模块实现
### 功能介绍
这个模块用于RSA算法的加密和解密
**当前支持一定位数(包括2048)的公钥私钥生成**
**大质数的生成采用miller_rabin判别法**
**模逆元的求解使用拓展欧几里得算法**
**明文、密文的求解采用了python内置的快速幂取模方法pow**
加密和解密结果均以hex编码格式输出, 但是utils中提供了hex编码和utf-8字符文本相互转换的函数
**这个模块完全使用python原生库实现,无需安装第三方库**
### 目录结构
```
.
├── __pycache__ # python字节码保存目录
├── RSA.py # 基于RSA算法的加密解密
├── main.py # 加密解密展示、RSA类使用示例
└── utils.py # 一些数学和编码相关的工具函数
```
# 实验三、 Hash长度扩展攻击
本次实验来自于SEED 实验室(https://seedsecuritylabs.org/),共需要完成如下4个小任务。通过这4个任务完成对一个服务器网站的 Hash 扩展攻击,并对 Hash 扩展攻击进行防御验证。
+ 任务1:发送请求来列出所有文件
+ 任务2:创建Padding
+ 任务3:长度扩展攻击
+ 任务4:使用 HMAC 来抵御长度扩展攻击
**具体实验环境搭建请参考链接.**
https://seedsecuritylabs.org/Labs_20.04/Crypto/
### 目录结构
```
.
├── Hash_Length_Ext.md # 实验过程记录
├── __pycache__ # python字节码保存目录
├── assets # 附件
├── Labsetup # 实验环境docker文件夹
├── hmac256.py # HMAC-256脚本
├── length_ext.c # MAC-256长度拓展攻击脚本
└── length_ext # MAC-256长度拓展攻击脚本可执行文件
```
# 实验四、 python-ElGamal数字签名模块实现
### 功能介绍
这个模块模拟了ElGamal数字签名算法
**当前支持ElGamal一定位数的公钥对私钥生成**
**大质数的生成采用miller_rabin判别法**
**模逆元的求解使用拓展欧几里得算法**
**签名和认证采用了python内置的快速幂取模方法pow**
### 目录结构
```
.
├── __pycache__ # python字节码保存目录
├── ElGamal.py # ElGamal数字签名算法实现
├── main.py # 模块使用示例
└── utils.py # 辅助函数
```