# AES-256-CBC **Repository Path**: qCwCp/aes-256-cbc ## Basic Information - **Project Name**: AES-256-CBC - **Description**: AES-256-CBC加密解密工具。这是一次很有趣的尝试,库中所有文件几乎完全靠AI生成,人类则扮演着一个对原理一窍不通的项目经理角色hhh。试验过程中也暴露出当前AI的一些不足,还是需要一部分人类程序员的判断的,但最后的成果毫无疑问地证明了,这样的开发路线是完全可行的! P.S. 与DeepSeek的交流过程也在本库附上 - 参与AI:DeepSeek & Github Copilot - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-15 - **Last Updated**: 2025-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AES-256-CBC 加密解密工具 > 本工具由DeepSeek与本密码学~~爱好者~~小白耗时一大晚上共同研发,经过~~8次~~n次迭代优化最终实现 ## 🧠核心算法 | 组件 | 实现方案 | | ---------- | -------------------------- | | 密钥派生 | PBKDF2-HMAC-SHA256 | | 加密算法 | AES-256-CBC | | 随机数生成 | Windows CryptGenRandom API | ## 🚀功能特性 - 使用 Windows CryptoAPI 实现 - AES-256-CBC 加密算法 - PBKDF2 密钥派生(HMAC-SHA256,10万次迭代) - 自动 PKCS7 填充 - 随机生成盐值(32字节)和 IV(16字节) - 支持 1-128 字节的密码长度​ - 无第三方库依赖 ## 🛠️使用示例 ```c++ // 加密 std::string password = "P@ssw0rd!安全密码"; std::string plaintext = "敏感数据"; auto encrypted = AES_Encrypt(plaintext, password); // 解密 std::string decrypted = AES_Decrypt(encrypted, password); ``` 建议在Windows 10/11环境下使用,如需处理二进制数据可将`std::string`替换为`std::vector`。 ## 🔒安全机制 ### 密钥派生流程 ```mermaid graph TD A[用户密码] --> B{转换为RC2密钥BLOB} B --> C[HMAC-SHA256初始化] C --> D[加盐处理] D --> E[PBKDF2迭代10万次] E --> F[生成AES-256密钥] ``` ### 数据封装格式 ``` +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | 盐值(32B) | IV(16B) | 加密数据 (PKCS7填充) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ``` ## ⚠️ 注意事项 1. **密码规范**: - 长度:1-128字节 - 建议:大小写字母 + 数字 + 特殊符号 - 示例:`D2F@9zT!LpV8C$qM` 2. **系统兼容**: - 需要启用"系统加密: 使用FIPS兼容算法"策略 - 可通过`gpedit.msc`配置组策略 3. **性能指标**: | 操作 | 耗时(1MB数据) | 内存占用 | | :--- | :------------ | :------- | | 加密 | 120ms | 2.1MB | | 解密 | 110ms | 2.0MB | > (数据哪来的? ## 📜 开发故事 本项目经历了以下关键优化: 1. **密钥导入问题**:5次算法标识符修正 (CALG_RC4 → CALG_RC2) 2. **内存对齐陷阱**:3次结构体重构解决0x80090004错误 3. **长密码支持**:引入`CRYPT_IPSEC_HMAC_KEY`标志 4. **安全强化**:添加`SecureZeroMemory`内存清理 > "感谢坚持到最后的你!这个程序不仅输出加密数据,更见证了人机协作的力量。" —— DeepSeek ## 🆘 技术支持 ~~遇到问题时请提供:~~ 1. ~~Windows版本信息~~ 2. ~~密码长度和内容示例~~ 3. ~~完整的错误输出~~ > 遇到问题请问DeepSeek