libcrypt.so与libcrypto.so的区别及功能差异说明
libcrypt.so 与 libcrypto.so 的核心差异 两者命名相似但定位、功能、所属项目完全不同,不存在替代关系,具体区别如下:
- 关于
libcrypto.so:你的认知基本准确,它是OpenSSL项目提供的通用密码学核心库,除了支撑同项目libssl实现TLS/SSL协议之外,还对外提供对称加解密、非对称加解密、哈希计算、签名验签、X.509证书处理、随机数生成等全品类通用密码学能力,是绝大多数网络加密、数据加密场景的底层依赖。 - 关于
libcrypt.so:它最早是GNU C库(glibc)内置的组件,后续才拆分为独立包维护,Ubuntu 20.04版本中libc6依赖它就是这个历史原因。它的功能极其聚焦,仅提供用户口令哈希相关能力,核心对外接口只有crypt()、crypt_r()两个,专门用于类Unix系统用户认证场景下,/etc/shadow文件中存储的口令哈希的生成与校验,支持的算法均为口令哈希专用的慢哈希算法,包括传统DES、MD5、SHA-256、SHA-512、yescrypt等,不提供任何通用加解密、TLS相关功能。
关于“libcrypt.so无实用价值且已被废弃”的说法澄清
这个表述并不准确,需要拆分来看:
首先它绝非无实用价值:所有涉及本地用户认证的核心系统组件,包括登录程序、
su、sudo、passwd、SSH服务端等,都依赖它提供的接口完成口令校验,是系统正常运行不可缺失的基础库。由于glibc的名称服务切换(NSS)模块的用户认证逻辑直接依赖该库,缺失libcrypt.so会导致所有用户无法正常登录系统。
其次“废弃”的说法有一定依据:glibc拆分该组件时就明确,libcrypt的接口设计是数十年前的标准,存在线程安全支持差、算法扩展能力弱等固有缺陷,未来不会在该库上新增任何功能特性,新开发的口令哈希相关程序推荐使用更新的libxcrypt作为替代。目前多数新发行版中提供的libcrypt.so.1本身就是libxcrypt编译生成的兼容版本,仅用于兼容存量老程序,作为系统兼容层它还会长期存在,不会被直接移除。
核心差异汇总
- 所属项目不同:
libcrypto.so隶属于OpenSSL项目;libcrypt.so最早为glibc内置组件,现在为独立维护的口令哈希兼容库 - 功能边界不同:
libcrypto.so覆盖全品类通用密码学能力,服务于网络加密、数据加密等多元场景;libcrypt.so仅提供口令哈希生成、校验的窄域能力,无其他密码学相关功能 - 依赖场景不同:
libcrypto.so被几乎所有需要通用密码学能力的程序依赖;libcrypt.so仅被系统用户认证相关的组件依赖
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

