|
|

分享源码
| 界面截图: |
- |
| 是否带模块: |
- |
| 备注说明: |
- |
本帖最后由 莫小乐 于 2026-6-16 13:26 编辑
AES-192-CBC 加密解密模块说明文档
一、功能简介
本模块采用 AES-192-CBC 对称加密算法,内置SHA1完整性校验绑定本机机器码,防止密文篡改、跨机器盗用,输出统一分段十六进制字符串,加解密配套、开箱即用。
二、核心特性
- 标准CBC模式,每次加密自动生成16字节随机IV,相同明文每次加密结果不同;
- SHA1校验绑定机器码:校验内容 = 机器码 + IV十六进制串 + 密文十六进制串;
- 密文格式三段分隔:
SHA1校验值_IV十六进制_加密内容十六进制;
- 校验失败、格式错误自动返回空文本,不会输出原始明文;
- AES192硬性要求密钥长度24位字符,长度不符加密解密异常。
三、数据结构说明
输出密文格式(下划线_分段):
SHA1校验码_16字节IV转十六进制_明文加密后字节集转十六进制
- 第一段:SHA1校验值,用于完整性+机器码校验;
- 第二段:随机向量IV,CBC解密必需参数;
- 第三段:AES加密后的原始密文字节集十六进制。
四、子程序说明
1. 生成AES随机IV()
返回值:字节集(16字节)
功能:生成标准AES-CBC所需16字节随机初始化向量,内部0~255随机填充。
2. AES加密(明文, 密钥)
参数:
- 明文:文本型,需要加密的原始内容;
- 秘钥:文本型,必须24位字符(AES-192)。
返回:带校验的完整密文字符串。
流程:
- 生成随机IV;
- AES-CBC加密明文;
- IV、密文转为十六进制;
- 拼接机器码+IV十六进制+密文十六进制计算SHA1;
- 组合
SHA1_IVHex_CipherHex 返回。
3. AES解密(完整密文串, 密钥)
参数:
- 加密完整串:加密函数输出的完整分段字符串;
- 秘钥:文本型,和加密一致24位密钥。
返回:原始明文文本,校验/格式错误返回空。
流程:
- 以下划线分割字符串,成员不为3直接返回空;
- 取出存储的SHA1、IV十六进制、密文十六进制;
- 使用当前程序集机器码重新计算SHA1对比;
- 校验不一致直接返回空(防篡改、换机器);
- 十六进制转回字节集,执行AES解密,转文本返回。
五、调用示例(窗口启动自动测试)
```易语言
.子程序 __启动窗口_创建完毕
.局部变量 加密串, 文本型
.局部变量 解密文本, 文本型
' 设置绑定机器码,加密解密必须一致
机器码_密文 = “MYPC20260616”
' 加密,24位密钥
加密串 = AES加密 (“这是测试明文abc123”, “123456789012345678901234”)
输出调试文本 (“加密结果:” + 加密串)
' 解密,密钥与加密相同
解密文本 = AES解密 (加密串, “123456789012345678901234”)
输出调试文本 (“解密结果:” + 解密文本)
## 六、使用注意事项
1. 机器码_密文为程序集变量,同一程序运行期间加密、解密必须赋值完全相同机器码,否则校验失败无法解密;
2. 密钥固定24字符,不足/超出都会导致AES加解密失败;
3. 密文不可手动修改任意字符,改动后SHA1校验不通过直接解密失败;
4. 依赖支持库命令:对称加密、对称解密、校验_取sha1、字节集_字节集到十六进制、字节集_十六进制到字节集;
5. 分隔符固定下划线`_`,明文、密钥请勿大量包含下划线,避免分割错乱。
| 窗口程序集名 | 保 留 | 保 留 | 备 注 | | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | | 机器码_密文 | 文本型 | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 加密串 | 文本型 | | | | 解密文本 | 文本型 | | |
机器码_密文 = “MYPC20260616” 加密串 = AES加密 (“这是测试明文abc123”, “123456789012345678901234”)输出调试文本 (“加密结果:” + 加密串 )解密文本 = AES解密 (加密串, “123456789012345678901234”)输出调试文本 (“解密结果:” + 解密文本 )IV = 取空白字节集 (16 ) 计次循环首 (16, i ) IV [i ] = 取随机数 (0, 255 ) 计次循环尾 ()返回 (IV )| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 随机IV | 字节集 | | | | 明文字节 | 字节集 | | | | 密文字节 | 字节集 | | | | IV_十六进制 | 文本型 | | | | 密文_十六进制 | 文本型 | | | | 校验源字节 | 字节集 | | | | SHA1校验码 | 文本型 | | | | 完整输出 | 文本型 | | |
随机IV = 生成AES随机IV ()明文字节 = 到字节集 (明文 )密文字节 = 对称加密 (明文字节, 到字节集 (秘钥 ), #对称算法_AES_192_CBC, , 随机IV )IV_十六进制 = 字节集_字节集到十六进制 (随机IV )密文_十六进制 = 字节集_字节集到十六进制 (密文字节 ) 校验源字节 = 到字节集 (机器码_密文 + IV_十六进制 + 密文_十六进制 )SHA1校验码 = 校验_取sha1 (校验源字节 ) 完整输出 = SHA1校验码 + “_” + IV_十六进制 + “_” + 密文_十六进制 返回 (完整输出 )| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 分割数组 | 文本型 | | 0 | | 原始SHA1 | 文本型 | | | | IV_十六进制 | 文本型 | | | | 密文_十六进制 | 文本型 | | | | IV字节 | 字节集 | | | | 密文字节 | 字节集 | | | | 校验源字节 | 字节集 | | | | 计算SHA1 | 文本型 | | | | 明文字节 | 字节集 | | |
分割数组 = 分割文本 (加密完整串, “_”, ) 如果真 (取数组成员数 (分割数组 ) ≠ 3 ) 返回 (“”)  原始SHA1 = 分割数组 [1 ]IV_十六进制 = 分割数组 [2 ]密文_十六进制 = 分割数组 [3 ] 校验源字节 = 到字节集 (机器码_密文 + IV_十六进制 + 密文_十六进制 )计算SHA1 = 校验_取sha1 (校验源字节 ) 如果真 (原始SHA1 ≠ 计算SHA1 ) 返回 (“”)  IV字节 = 字节集_十六进制到字节集 (IV_十六进制 )密文字节 = 字节集_十六进制到字节集 (密文_十六进制 )明文字节 = 对称解密 (密文字节, 到字节集 (秘钥 ), #对称算法_AES_192_CBC, , IV字节 )返回 (到文本 (明文字节 ))
|
|