新闻详情

新闻详情

首页 / 资讯中心 / 详情

cryptography 库 decrepit 模块详解:遗留对称算法与模式的安全兼容用法

发布时间:2026/9/27 7:27:43来源:尧图网络
cryptography 库 decrepit 模块详解:遗留对称算法与模式的安全兼容用法
密码学【免费下载链接】cryptographycryptography is a package designed to expose cryptographic primitives and recipes to Python developers.项目地址https://gitcode.com/gh_mirrors/cr/cryptography点击查看免费下载本文聚焦 Pythoncryptography库当前仓库 gh_mirrors/cr/cryptography中专门收纳陈旧、已弃用或不安全密码算法的cryptography.hazmat.decrepit模块系统讲解其设计动机、六个遗留对称算法ARC4、TripleDES、CAST5、SEED、Blowfish、IDEA与三个遗留分组模式CFB、CFB8、OFB的参数约束、完整用法与底层校验机制。读完本文你将掌握如何在非不得已的向后兼容场景下正确调用这些算法理解密钥长度与 IV 校验在源码中的落地方式并清楚它们为何被强烈不建议用于新应用。decrepit 模块是什么定位与设计动机在cryptography库的目录结构中docs/hazmat/decrepit/index.rst对模块给出了精确定位该模块存放陈旧、已弃用和/或不安全的密码算法只有在罕见的向后兼容或互操作性需求下才可能需要它们。除非必要强烈不建议使用。这里的hazmat是 hazardous materials危险材料的缩写指库中供具备密码学素养的开发者使用的底层原语层decrepit意为破旧、衰败则是这一层中的隔离区——把不应再被新代码使用的算法从主命名空间剥离出来同时保留兼容路径。这一点在 CHANGELOG.rst 中有明确记录43.0.0 版本新增decrepit模块将此前于 37.0.0 弃用的CAST5、SEED、IDEA、Blowfish移入同版本将TripleDES与ARC4移入47.0.0 版本将CFB、OFB、CFB8三个模式移入并将于 49.0.0 从modes模块移除同时把Camellia移入将于 49.0.0 从ciphers模块移除并弃用了 TripleDES 的 64/128 位短密钥。从源码结构看模块实体位于 src/cryptography/hazmat/decrepit/由两部分组成ciphers/algorithms.py遗留对称算法ARC4、TripleDES、Blowfish、CAST5、SEED、IDEA另有源码中已存在但暂未写入文档的Camellia、RC2ciphers/modes.py遗留模式CFB、CFB8、OFB。对应文档为 docs/hazmat/decrepit/ciphers.rst对称算法与 docs/hazmat/decrepit/modes.rst模式。使用前提Cipher 对象与模式的配合decrepit 模块不提供独立的加密入口所有算法都需要与 Cipher 对象配合使用。通用调用骨架如下from cryptography.hazmat.primitives.ciphers import Cipher, modes from cryptography.hazmat.decrepit.ciphers.algorithms import CAST5 key b0123456789abcdef # 16 字节 128 位 iv b01234567 # 8 字节 64 位须与块大小一致 cipher Cipher(CAST5(key), modes.CBC(iv)) encryptor cipher.encryptor() ciphertext encryptor.update(ba secret message) encryptor.finalize() decryptor Cipher(CAST5(key), modes.CBC(iv)).decryptor() plaintext decryptor.update(ciphertext) decryptor.finalize()唯一例外是流密码ARC4它不使用任何模式构造构造Cipher时第二个参数必须显式传None。加密与解密同构异或流因此同一个update调用既可加密也可解密。遗留对称算法详解以下六个算法已按版本 43.0.0 正式文档化于 ciphers.rst其实现细节可在 algorithms.py 中逐一核对。先看整体参数一览算法类型块大小合法密钥长度引入版本关键弱点ARC4流密码—40/56/64/80/128/192/256 位源码另含 160 位43.0.0初始输出流存在严重弱点TripleDES分组密码64 位64/128/192 位实际有效 56/112/168 位43.0.0有已知密码分析缺陷、极慢CAST5分组密码64 位40–128 位按 8 位递增43.0.0弱密钥攻击SEED分组密码128 位128 位43.0.0韩国 KISA 标准域外罕见Blowfish分组密码64 位32–448 位按 8 位递增43.0.0弱密钥攻击IDEA分组密码64 位128 位43.0.0弱密钥攻击ARC4Alleged RC4ARC4 是一种流密码其初始输出流存在严重弱点使用被强烈不建议。它不使用模式构造。合法的密钥长度为 40、56、64、80、128、192 或 256 位文档口径源码中的key_sizes集合实际还包含 160 位密钥必须保密。import os from cryptography.hazmat.decrepit.ciphers.algorithms import ARC4 from cryptography.hazmat.primitives.ciphers import Cipher key os.urandom(16) # 128 位密钥 algorithm ARC4(key) # 流密码不使用任何模式 cipher Cipher(algorithm, modeNone) encryptor cipher.encryptor() ct encryptor.update(ba secret message) decryptor Cipher(algorithm, modeNone).decryptor() decryptor.update(ct) # ba secret message实现上ARC4的name RC4。若把ARC4与CBC、CTR、GCM等分组模式组合使用会抛出UnsupportedAlgorithm_Reasons.UNSUPPORTED_CIPHER这一点在 test_algorithms.py 的test_invalid_mode_algorithm中有直接断言。TripleDES3DESTriple DES 是 NIST 标准化的分组密码具有已知的密码分析缺陷虽然目前尚无实用攻击且速度极慢官方不推荐任何新应用使用旧应用也应考虑迁移。其合法密钥为 64、128 或 192 位由于每个密钥分量含一个奇偶校验字节DES 实际只使用其中的 56、112 或 168 位。历史上可把三条 56 位密钥直接拼接成完整密钥。47.0.0 起的重要变更传入 64 位8 字节或 128 位16 字节密钥已被弃用未来版本将只接受 192 位24 字节密钥。用户应自行扩展短密钥单 DES 密钥用key key key双密钥用key key[:8]。源码中TripleDES.__init__对 8/16 字节密钥会发出utils.DeprecatedIn47警告并自动完成上述扩展最终仍以 24 字节密钥参与运算CHANGELOG.rst 同样记录了这一弃用决策。from cryptography.hazmat.decrepit.ciphers.algorithms import TripleDES from cryptography.hazmat.primitives.ciphers import Cipher, modes key b0123456789abcdef01234567 # 24 字节 192 位3 个 56 位分量 iv b01234567 # 8 字节与 64 位块大小一致 cipher Cipher(TripleDES(key), modes.CBC(iv))测试 test_3des.py 以 NIST 标准向量vectors/cryptography_vectors/ciphers/3DES/下的TCBC*.rsp、TOFB*.rsp、TCFB64*.rsp、TCFB8*.rsp等对 CBC、OFB、CFB、CFB8、ECB 各模式做了全面验证。CAST5CAST-128CAST5 是加拿大政府通信安全机构CSE批准使用的分组密码变长密钥支持 40–128 位、按 8 位递增。示例源自文档 doctestimport os from cryptography.hazmat.decrepit.ciphers.algorithms import CAST5 from cryptography.hazmat.primitives.ciphers import Cipher, modes key os.urandom(16) # 128 位 iv os.urandom(8) # 与块大小64 位一致 cipher Cipher(CAST5(key), modes.CBC(iv))测试覆盖 ECB/CBC/OFB/CFB 四种模式向量来自vectors/cryptography_vectors/ciphers/CAST5/。SEEDSEED 由韩国信息安全局KISA开发定义于 RFC 4269在韩国产业界使用广泛但在其他地区很少见到。固定 128 位密钥、128 位块大小。测试向量包括 RFC 4269ECB、RFC 4196CBC以及seed-ofb.txt、seed-cfb.txt均位于vectors/cryptography_vectors/ciphers/SEED/。BlowfishBlowfish 由 Bruce Schneier 开发已知在弱密钥下易受攻击作者本人也建议用户迁移到更新的算法。支持 32–448 位、按 8 位递增的密钥。vectors/cryptography_vectors/ciphers/Blowfish/下的bf-ecb.txt、bf-cbc.txt、bf-ofb.txt、bf-cfb.txt为其测试向量。IDEAIDEA 诞生于 1991 年是 OpenPGP 标准的可选组件同样存在弱密钥攻击问题不建议用于新应用。固定 128 位密钥、64 位块大小。源码中暂未写入文档的算法Camellia 与 RC2除上述六个文档化算法外algorithms.py 中还包含Camelliablock_size 128密钥 128/192/256 位47.0.0 起移入本模块并将于 49.0.0 从ciphers模块移除见 CHANGELOG.rstRC2block_size 64该实现仅支持 128 位密钥不提供有效密钥位数effective key bits或其他密钥长度支持属受限实现。另外还有一个_DES占位类注释标明实际不支持仅为测试标记。遗留模式详解CFB / CFB8 / OFB47.0.0 起CFB、CFB8、OFB三个模式从cryptography.hazmat.primitives.ciphers.modes移入cryptography.hazmat.decrepit.ciphers.modes详见 modes.rst 与 CHANGELOG.rst。它们与普通模式一样配合Cipher对象使用使用方式与primitives.ciphers.modes中的模式完全相同。三者共同点都将分组密码转换为流密码CFB/OFB 全块反馈CFB8 按 8 位段反馈都不需要填充明文可为任意长度IV 必须随机且不可预测长度必须与算法的块大小一致64 位块 → 8 字节 IV128 位块 → 16 字节 IV。import os from cryptography.hazmat.decrepit.ciphers.algorithms import TripleDES from cryptography.hazmat.decrepit.ciphers.modes import CFB, CFB8, OFB from cryptography.hazmat.primitives.ciphers import Cipher key os.urandom(24) # TripleDES 192 位 iv os.urandom(8) # 64 位块 → 8 字节 IV c1 Cipher(TripleDES(key), CFB(iv)) c2 Cipher(TripleDES(key), CFB8(iv)) c3 Cipher(TripleDES(key), OFB(iv))在 modes.py 中三个类均继承ModeWithInitializationVector构造时先做 bytes-like 类型检查并通过validate_for_algorithm _check_iv_and_key_length完成与算法的配对校验。test_3des.py对 TripleDES 与 CFB/CFB8/OFB 的组合均以 NIST 向量如TCFB64vartext.rsp、TCFB8varkey.rsp、TOFBMMT*.rsp做了验证。参数校验机制密钥与 IV 的强制约束decrepit 算法不是能用就行其对密钥/IV 的约束由共享校验函数在构造时强制执行这正是参数合法性可验证的底层依据。密钥校验_verify_key_sizeprimitives/_cipheralgorithm.py先确认密钥是 bytes-like再检查len(key) * 8是否落在算法的key_sizes集合内否则抛出ValueError(Invalid key size (...) for algorithm name.)。每个算法类的key_size属性返回len(self.key) * 8。对应测试test_algorithms.py分别覆盖了合法尺寸参数化用例、非法尺寸抛ValueError、非法类型抛TypeError三类场景例如ARC4(b0*34)会因 272 位不在合法集合中而失败。IV 校验_check_iv_and_key_lengthprimitives/_modes.py要求算法必须是BlockCipherAlgorithm否则抛UnsupportedAlgorithm并校验 IV 长度与块大小严格相等不满足则抛ValueError。这正是IV 必须与块大小同长这一文档约束在源码中的强制实现。测试与标准向量验证该模块的正确性并非空口之谈仓库提供两套测试互为印证tests/hazmat/primitives/decrepit/test_algorithms.py验证六个算法的密钥尺寸边界、非法密钥类型/尺寸的异常行为以及 ARC4 与分组模式组合时的UnsupportedAlgorithmtests/hazmat/primitives/decrepit/test_3des.py用 NIST 官方.rsp测试向量对 TripleDES 的 CBC/OFB/CFB/CFB8/ECB 各模式做加密/解密一致性检验。向量数据存放于 vectors/cryptography_vectors/ciphers/ 下对应的3DES/、ARC4/、Blowfish/、CAST5/、IDEA/、SEED/目录。此外仓库在 docs/development/custom-vectors/ 中还提供了这些算法的自生成/交叉验证脚本如generate_arc4.py/verify_arc4.go、generate_cast5.py/verify_cast5.go、generate_idea.py、generate_seed.py说明实现经过了跨语言、跨实现的向量核对。迁移与安全建议根据文档口径decrepit 模块中的算法仅在向后兼容或与遗留系统互操作的例外场景下才应使用除此之外一律强烈不建议。若你的场景允许更换算法应优先考虑 primitives 层 提供的现代原语尤其是带认证加密的 AEAD 方案如 AES-GCM它们在 symmetric-encryption.rst 与 aead.rst 中有完整使用说明。实践中的几条具体建议新代码零使用这些算法不提供任何安全增益且部分存在弱密钥、初始输出流弱点等已知缺陷遗留代码迁移优先TripleDES 与 Blowfish 的替换优先级最高——前者极慢且有密码分析缺陷后者有弱密钥问题留意弃用时间线TripleDES 的 8/16 字节密钥已弃用未来仅接受 24 字节CFB/OFB/CFB8与Camellia将于 49.0.0 从旧命名空间移除旧 import 路径应尽快切换至cryptography.hazmat.decrepit参数严格遵守即使必须使用也要满足文档与源码双重约束——密钥落在合法尺寸集合内、IV 长度等于块大小否则构造阶段就会抛出ValueError/TypeError/UnsupportedAlgorithm。总而言之decrepit模块是cryptography库为历史包袱设计的安全隔离舱它保留了旧算法可调用的最后通道同时通过文档警示、参数强校验、版本弃用与测试向量四重手段最大限度降低被误用的风险。理解它的边界是在真实系统中正确处理遗留互操作需求的前提。赞分享密码学【免费下载链接】cryptographycryptography is a package designed to expose cryptographic primitives and recipes to Python developers.项目地址https://gitcode.com/gh_mirrors/cr/cryptography点击查看免费下载相关推荐es-toolkit 兼容模块 invoke 详解按路径安全调用对象方法的完整指南es toolkit 兼容模块 invoke 详解按路径安全调用对象方法的完整指南 导读 invoke 是 es toolkit 的 Lodash 兼容模块前端后端3 步让老 Mac 装上新版 macOSOpenCore Legacy Patcher 手把手实战指南3 步让老 Mac 装上新版 macOSOpenCore Legacy Patcher 手把手实战指南 当 2017 年的 MacBook Pro 弹出此电操作系统固件驱动开发cytoscape.js 集合运算详解eles.symmetricDifference对称差的用法与实现原理cytoscape.js 集合运算详解eles.symmetricDifference对称差的用法与实现原理 导读 本文围绕 cytoscape.js 元数据可视化上一篇为什么选择Duktape5个关键优势让嵌入式开发更简单下一篇TypeScript 7 原生工具链走向整合tsgo 名称退役、代码库回归主仓库、VS Code 扩展捆绑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

如何攻击Wordpress站点常见报错与解决 2026/9/27 8:23:46

如何攻击Wordpress站点常见报错与解决

5个WordPress安全陷阱与防御注意事项 改个需求建站公司拖一周,这种憋屈感谁懂?刚上线的WordPress站点,后台改个按钮颜色,外包团队说“底层逻辑冲突”,得排期。结果第二天网站直接变白屏,或者更糟——被黑客植入了恶意代码,SEO收…

阅读更多 →
themeforestwordpress新手避坑速查手册:别花冤枉钱 2026/9/27 8:23:46

themeforestwordpress新手避坑速查手册:别花冤枉钱

themeforestwordpress新手避坑速查手册:别花冤枉钱 网站做好了没人访问,比没做还让人焦虑。你盯着后台那可怜个位数的UV,心里直打鼓,是不是域名没选对?是不是服务器太慢?别急,这大概率不是玄学,而是技术选型和基础配置的硬伤。…

阅读更多 →
NoneBot2 跨插件访问与依赖声明:深入理解 require 机制与插件加载时序 2026/9/27 8:23:40

NoneBot2 跨插件访问与依赖声明:深入理解 require 机制与插件加载时序

后端即时通讯 【免费下载链接】nonebot2 跨平台 Python 异步聊天机器人框架 / Asynchronous multi-platform chatbot framework written in Python 项目地址: https://gitcode.com/gh_mirrors/no/nonebot2 点击查看 免费下载 跨插件调用是 NoneBot2 插件化架构中的…

阅读更多 →
基于自适应语义路由(Semantic Routing)的知识库多路混合召回实战 2026/9/27 8:23:33

基于自适应语义路由(Semantic Routing)的知识库多路混合召回实战

基于自适应语义路由(Semantic Routing)的知识库多路混合召回实战在企业级大型 RAG(检索增强生成)知识库架构中,企业通常维护着数十个物理隔离、数据形态各异的垂直专业知识库(如:API 技术文档库…

阅读更多 →
Onivim 2 按键绑定(Key Bindings)配置完全指南:keybindings.json 格式、when 条件上下文与命令参考 2026/9/27 8:23:33

Onivim 2 按键绑定(Key Bindings)配置完全指南:keybindings.json 格式、when 条件上下文与命令参考

开发工具代码编辑器桌面应用 【免费下载链接】oni2 Native, lightweight modal code editor 项目地址: https://gitcode.com/gh_mirrors/on/oni2 点击查看 免费下载 Onivim 2 的按键绑定体系在设计上力求与 VSCode 的 Key Bindings 兼容,同时完整保留 V…

阅读更多 →
核心 Web 指标(CWV)2026 最新标准走读与应对 2026/9/27 8:23:26

核心 Web 指标(CWV)2026 最新标准走读与应对

核心 Web 指标(CWV)2026 最新标准走读与应对在 Google 搜索引擎的 SEO 排名权重与现代前端性能工程中,Google 核心 Web 指标(Core Web Vitals,简称 CWV) 是全球衡量真实用户体验(Field Experien…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉