# DES/3DES加解密 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- # 功能概述 提供DES(Data Encryption Standard)与3DES(Triple DES)数据加解密功能。DES/3DES属于安全强度较低的加密算法,为兼容旧系统及部分特殊行业的网关,系统保留了对这两种算法的支持;在无兼容性要求的场景下,建议优先使用安全性更高的AES算法。 # DES/3DES加解密API ## 头文件 *mbedtls/des.h* ## 函数概览 | **函数** | **说明** | | --- | --- | | *mbedtls_des3_init()* | 初始化3DES上下文 | | *mbedtls_des3_free()* | 清除密钥数据并释放3DES上下文 | | *mbedtls_des3_set3key_enc()* | 设置3DES加密密钥(168位) | | *mbedtls_des3_set3key_dec()* | 设置3DES解密密钥(168位) | | *mbedtls_des3_crypt_ecb()* | 执行3DES ECB模式的数据块加解密 | ## 函数详解 ### mbedtls_des3_init - **功能描述** 初始化3DES上下文。调用其他任何3DES函数前,必须先调用本函数完成初始化。 - **函数原型** ```c void mbedtls_des3_init(mbedtls_des3_context *ctx); ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *ctx* | 输出 | *mbedtls_des3_context ** | 待初始化的3DES上下文指针;详见 [*mbedtls_des3_context*](#mbedtlsdes3context) | - **返回值说明** 无 ### mbedtls_des3_free - **功能描述** 清除上下文中的密钥数据并释放3DES上下文。 - **函数原型** ```c void mbedtls_des3_free(mbedtls_des3_context *ctx); ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *ctx* | 输入/输出 | *mbedtls_des3_context ** | 已初始化的3DES上下文指针;详见 [*mbedtls_des3_context*](#mbedtlsdes3context) | - **返回值说明** 无 ### mbedtls_des3_set3key_enc - **功能描述** 设置3DES加密密钥(168位,24字节),并生成加密所用的内部轮密钥。 - **函数原型** ```c int mbedtls_des3_set3key_enc(mbedtls_des3_context *ctx, const unsigned char key[24]); ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *ctx* | 输入/输出 | *mbedtls_des3_context ** | 已初始化的3DES上下文指针;详见 [*mbedtls_des3_context*](#mbedtlsdes3context) | | *key* | 输入 | const unsigned char[24] | 24字节的加密密钥 | - **返回值说明** *0*:函数执行成功 其他值:函数执行失败 ### mbedtls_des3_set3key_dec - **功能描述** 设置3DES解密密钥(168位,24字节),并生成解密所用的内部轮密钥。 - **函数原型** ```c int mbedtls_des3_set3key_dec(mbedtls_des3_context *ctx, const unsigned char key[24]); ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *ctx* | 输入/输出 | *mbedtls_des3_context ** | 已初始化的3DES上下文指针;详见 [*mbedtls_des3_context*](#mbedtlsdes3context) | | *key* | 输入 | const unsigned char[24] | 24字节的解密密钥 | - **返回值说明** *0*:函数执行成功 其他值:函数执行失败 ### mbedtls_des3_crypt_ecb - **功能描述** 执行3DES ECB模式的数据块加解密,单次固定处理8字节数据块。执行加密还是解密,由此前设置的密钥类型决定。 - **函数原型** ```c int mbedtls_des3_crypt_ecb(mbedtls_des3_context *ctx, const unsigned char input[8], unsigned char output[8]); ``` - **参数说明** | **参数名** | **输入/输出** | **类型** | **说明** | | --- | --- | --- | --- | | *ctx* | 输入/输出 | *mbedtls_des3_context ** | 已初始化并成功设置密钥的3DES上下文指针;详见 [*mbedtls_des3_context*](#mbedtlsdes3context) | | *input* | 输入 | const unsigned char[8] | 8字节输入数据块(明文或密文) | | *output* | 输出 | unsigned char[8] | 存放8字节输出结果的缓冲区 | - **返回值说明** *0*:函数执行成功 其他值:函数执行失败 ## 结构体定义 ### mbedtls_des3_context 3DES上下文结构体定义如下: ```c typedef struct mbedtls_des3_context { uint32_t sk[96]; } mbedtls_des3_context; ``` | **参数** | **类型** | **说明** | | --- | --- | --- | | *sk* | uint32_t[96] | 保存3DES密钥扩展后生成的轮密钥;调用 *mbedtls_des3_set2key_enc()*、*mbedtls_des3_set3key_enc()*、*mbedtls_des3_set2key_dec()* 或 *mbedtls_des3_set3key_dec()* 后完成配置 | ```{note} 业务代码只需定义该上下文并传入 *mbedtls_des3_** 接口,不应直接访问 *sk* 成员 ``` # 应用逻辑流程图 ```{image} images/image_H1U2b1U8zoMtItxt5hBclKCin3b.webp :width: 1041px :height: 735px ``` # 示例代码 完整示例代码请查看https://github.com/UniRTOS/UniRTOS-Doc-Examples/blob/main/network/crypto/des_demo.c