You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Rust中使用DES-ECB解密字符串遇支持性错误求助

解决Rust中DES-ECB解密在Arch Linux上失败的问题

问题原因

Arch Linux默认的OpenSSL配置禁用了DES这类被标记为不安全的弱加密算法,而Rust Playground使用的OpenSSL环境未做此限制,导致代码在Playground能正常运行但本地报错。

解决方案

方案一:临时修改OpenSSL配置启用DES

  1. 编辑系统OpenSSL配置文件/etc/ssl/openssl.cnf
  2. 确保文件顶部存在openssl_conf = default_conf,如果没有则添加该行
  3. 在文件末尾添加以下配置段:
[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
CipherString = DEFAULT:@SECLEVEL=0
  1. 保存文件后重新运行代码即可解密

注意:此配置会全局降低OpenSSL的安全级别,允许所有弱算法,仅建议临时测试使用,测试完成后请恢复原配置。

方案二:使用纯Rust加密库替代OpenSSL(推荐)

使用不依赖系统OpenSSL的纯Rust加密库,避免修改系统配置,且更可控。以block-modes和des crate为例:

  1. 在Cargo.toml中添加依赖:
[dependencies]
base64 = "0.21"
block-modes = "0.10"
des = "0.8"
  1. 修改代码如下:
use base64::{engine::general_purpose, Engine as _};
use block_modes::{BlockMode, Ecb};
use des::Des;
use block_modes::block_padding::Pkcs7;

// 定义DES-ECB模式,使用PKCS7填充(与OpenSSL默认填充一致)
type DesEcb = Ecb<Des, Pkcs7>;

fn main() {
    let key = b"38346591";
    let encrypted_data_b64 = b"ID2ieOjCrwfgWvL5sXl4B1ImC5QfbsDyzIPKrPZsLT6XiYvvt4HzTf4FNdlY3djNa2mCXTFAkYtwZjohCZ6rhxw7tS9a8Gtq";

    // Base64解码加密数据
    let encrypted_data = general_purpose::STANDARD.decode(encrypted_data_b64).unwrap();

    // 初始化DES-ECB解密器
    let cipher = DesEcb::new_from_slices(key).unwrap();
    // 执行解密(自动处理PKCS7填充)
    let decrypted = cipher.decrypt_vec(&encrypted_data).unwrap();

    println!("Decrypted Data: {:?}", String::from_utf8(decrypted).unwrap());
}

重要提示

DES是已被淘汰的弱加密算法,安全性极低,强烈建议不要在生产环境使用。如果条件允许,应尽快将加密方案替换为AES等现代安全算法。

内容的提问来源于stack exchange,提问作者rajput-hemant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 00:32:00