{"id":20498358,"url":"https://github.com/leejiajia11/s-aes","last_synced_at":"2026-04-17T22:02:34.845Z","repository":{"id":259875936,"uuid":"879720028","full_name":"Leejiajia11/S-AES","owner":"Leejiajia11","description":"重庆大学，信息安全导论课程第二次作业。利用C++/Qt，根据S-AES算法编写和调试程序，提供GUI解密支持用户交互。提供普通单次加密、双重加密，以及三重加密的三种加密模式给用户进行使用，同时还实现了中间相遇攻击和CBC模式下的S-AES加密。","archived":false,"fork":false,"pushed_at":"2024-11-03T14:58:55.000Z","size":5750,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-16T06:46:22.729Z","etag":null,"topics":["chongqing-university","cpp","information-security","qt","s-aes"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Leejiajia11.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-28T12:38:06.000Z","updated_at":"2024-11-04T05:58:40.000Z","dependencies_parsed_at":"2024-10-28T15:26:47.833Z","dependency_job_id":"4d267c80-6d4d-454e-970b-2ae048d0fe6e","html_url":"https://github.com/Leejiajia11/S-AES","commit_stats":null,"previous_names":["leejiajia11/s-aes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leejiajia11%2FS-AES","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leejiajia11%2FS-AES/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leejiajia11%2FS-AES/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Leejiajia11%2FS-AES/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Leejiajia11","download_url":"https://codeload.github.com/Leejiajia11/S-AES/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242087919,"owners_count":20069722,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chongqing-university","cpp","information-security","qt","s-aes"],"created_at":"2024-11-15T18:13:55.449Z","updated_at":"2026-04-17T22:02:29.825Z","avatar_url":"https://github.com/Leejiajia11.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# S-AES 加密系统\n\n## 项目介绍\n本项目利用C++/Qt，根据S-AES算法编写和调试程序，提供GUI解密支持用户交互。输入可以是16bit的数据和16bit的密钥，输出是16bit的密文。加密算法使用4个不同的函数或变换：密钥加（Ax）、半字节代替（NS）、行移位（SR）和列混淆（MC），具体流程如下图。\n![加密流程图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/S-ASE.png) \n\n\n## 代码结构\n项目代码结构按如下组织：\n```\nS-AES/\n├── src/\n│   ├── attack.cpp\n│   ├── cbcmodel.cpp\n│   └── mainwindow.cpp\n├── include/\n│   ├── attack.h\n│   ├── cbcmodel.h\n│   └── mainwindow.h\n└── README.md\n```\n\n---\n\n## 第1关：基本测试\n\n#### 项目内容与特性\n- **简单加密**：使用S-AES算法对16位明文进行单块加密。\n- **简单解密**：使用相同的S-AES算法对加密后的密文进行解密，验证正确性。\n\n#### 运行界面说明\n\n1. **明文输入框**：输入16位二进制形式的明文。\n2. **密钥输入框**：输入16位二进制密钥。\n3. **密文显示框**：显示加密后的密文。\n4. **加密按钮**：触发加密操作。\n5. **解密按钮**：执行解密操作。\n6. **解密后的明文显示框**：显示解密后的明文。\n\n#### 功能演示（如图）\n![加密界面图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/encrypt1.png) \n\n---\n\n## 第2关：交叉测试\n\n#### 项目内容与特性\n- **算法一致性测试**：确保不同组编写的S-AES算法实现可以互操作。\n- **跨组加解密**：测试A组加密的密文能否被B组正确解密，反之亦然。\n\n#### 运行界面说明\n\n1. **明文输入框**：输入16位二进制形式的明文。\n2. **密钥输入框**：输入16位二进制密钥。\n3. **密文显示框**：显示加密后的密文。\n4. **加密按钮**：触发加密操作。\n5. **解密按钮**：执行解密操作。\n6. **解密后的明文显示框**：显示解密后的明文。\n\n#### 功能演示（如图）\n\n两组用户（A组和B组）各自输入相同的明文和密钥，系统会：\n1. 各自对输入的明文进行S-AES加密。\n2. 显示各自加密后的密文。\n\n- 与其他组进行交叉测试，以证明满足算法标准，选择密文为0110111101101011，密钥为1010011100111011，得到密文结果0000011100111000，两组同学编写的程序对明文P进行加密得到相同的密文C。\n\n- 其他组：\n\n![交叉测试图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/test0.png) \n\n\n- 本组：\n\n![交叉测试图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/test1.png) \n\n\n---\n\n## 第3关：扩展功能\n\n#### 项目内容与特性\n- **ASCII编码支持**：加密算法的数据输入可以是ASCII编码字符串（分组为2 Bytes），对应地输出也可以是ACII字符串。\n- **用户友好性**：解决明文和密文适应实际应用中的格式问题。\n\n#### 运行界面说明\n\n1. **明文输入框**：输入ASCII编码的明文。\n2. **密钥输入框**：输入16位二进制密钥。\n3. **密文显示框**：显示加密后的密文。\n4. **加密按钮**：触发加密操作。\n5. **解密按钮**：执行解密操作。\n6. **解密后的明文显示框**：显示解密后的明文。\n\n#### 功能演示（如图）\n\n用户输入ASCII编码的明文和密钥后，系统会：\n1. 将输入的ASCII编码明文转换为二进制形式。\n2. 使用S-AES算法逐块加密明文。\n3. 显示加密后的密文（可能是乱码）。\n\n![扩展功能图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/ASCII.png) \n\n---\n\n## 第4关：多重加密\n\n#### 项目内容与功能演示（如图）\n- **双重加密**：将S-AES算法通过双重加密进行扩展，分组长度仍然是16 bits，但密钥长度为32 bits。\n  ![双重加密图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/encrypt2.png)\n  \n- **三重加密**：采用32 bits密钥的模式进行三重加密解密。\n  ![三重加密图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/encrypt3.png)\n  \n- **中间相遇攻击**：利用已知的明文和密文对，尝试破解双重加密密钥。\n \n  ![中间相遇攻击图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/attack.png) \n\n1. 输入明文和对应的密文对，以及使用的加密算法（如双重加密的 S-AES），并设置所需的密钥组合（如𝐾1K1和𝐾2K2的长度）。\n ![中间相遇攻击图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/attack1.png) \n2. 系统将尝试使用中间相遇攻击方法推测密钥，通过两个加密阶段的结果匹配来找到可能的密钥组合。\n ![中间相遇攻击图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/attack2.png)\n ![中间相遇攻击图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/attack3.png) \n---\n\n## 第5关：工作模式基于 S-AES 算法的 CBC 加密与篡改密文实验\n\n本关展示如何使用基于 **S-AES 算法**的 **密码分组链接 (CBC)** 模式对较长的明文消息进行加密与解密，并探索密文篡改对解密结果的影响。程序随机生成一个 16 位的二进制初始向量 (IV)，在 CBC 模式下将超过 16 位的密文进行分组加密，同时演示如何在解密时正确处理密文篡改。\n\n![CBC 加密流程图](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/CBCmode.png) \n\n\n### 项目内容与特性\n\n- **CBC 模式加密**：基于 S-AES 算法，分块加密长明文，适应超出单块的明文输入。\n- **初始向量 (IV) 生成**：随机生成 16 位二进制的 IV 并显示，确保加解密双方共享。\n- **篡改密文实验**：用户可以模拟篡改密文分组，观察篡改前后解密结果的不同，分析 CBC 模式的错误传播特性。\n\n### 运行界面说明\n\n#### 必备控件\n\n1. **明文输入框**：用户输入二进制形式的明文，适应超过 16 位的长输入。\n2. **密钥输入框**：输入 16 位的二进制密钥。\n3. **IV 显示框**：随机生成 16 位的 IV，便于加解密双方共享。\n4. **密文显示框**：显示加密后的分组密文。\n5. **加密按钮**：触发 CBC 加密流程。\n6. **解密按钮**：执行 CBC 解密流程。\n7. **篡改密文按钮**：模拟密文篡改，测试解密结果的差异。\n8. **解密后的明文显示框**：显示解密后的原始明文或篡改后的结果。\n\n### 功能演示（如图）\n\n#### 1. CBC 加密流程\n用户输入明文、密钥后，系统会：\n1. 随机生成并显示 **16 位 IV**。\n2. 按 CBC 模式逐块加密明文，将加密结果作为密文显示。\n\n\n#### 2. CBC 解密流程\n在解密页面中，用户可以输入密文、密钥和 IV。\n1. 系统按 CBC 模式逐块解密密文。\n2. 显示还原的明文结果。\n\n![解密界面示例](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/cbc2.png) \n\n### 3. 篡改密文实验\n用户可以通过点击按钮篡改密文分组，并查看解密后的变化。\n\n![篡改密文界面示例](https://cdn.jsdelivr.net/gh/Leejiajia11/S-AES@main/images/cbc3.png) \n\n\n\n## 项目结果分析\n\n- **正常解密**：使用正确的密钥和 IV，可以恢复出原始明文。\n- **篡改后的解密**：修改密文后，解密结果产生明显错误，体现 CBC 模式的错误传播特性。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleejiajia11%2Fs-aes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fleejiajia11%2Fs-aes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fleejiajia11%2Fs-aes/lists"}