前置
- Python 3.9+(确保已安装)
- CMake (从 cmake.org 下载安装)
- Git (从 git-scm.com 下载安装)
- MinGW-w64 (GCC 编译器,从 SourceForge 下载)
- Ninja (可选,但推荐:
pip install ninja)
安装完 MinGW 后,记得把 mingw64\bin 目录添加到系统 PATH 环境变量中。
编译安装 liboqs(C 库)
bash
# 1. 克隆仓库
git clone https://github.com/open-quantum-safe/liboqs.git
cd liboqs
# 2. 创建构建目录
mkdir build
cd build
# 3. 配置 CMake
cmake -G "MinGW Makefiles" -DBUILD_SHARED_LIBS=ON -DOQS_BUILD_ONLY_LIB=ON -DCMAKE_INSTALL_PREFIX=F:/liboqs_install ..
# F:/liboqs_install是我自己的路径,可改
# 4. 编译并安装
mingw32-make -j8
mingw32-make install





配置python绑定
bash
# 克隆 oqs-python 仓库
git clone https://github.com/open-quantum-safe/liboqs-python.git
cd liboqs-python
bash
# 告诉 oqs-python 去哪里找 liboqs
$env:LIBOQS_PATH="F:/liboqs_install"
# 把 liboqs.dll 所在目录加入 PATH,这样 Python 运行时才能加载到 DLL
$env:PATH="$env:PATH;F:/liboqs_install/bin"
bash
# 推荐使用虚拟环境(可选但推荐)
python -m venv venv
.\venv\Scripts\activate
# 升级 pip
python -m pip install --upgrade pip
# 安装 oqs-python
pip install .
bash
python -c "from oqs import KeyEncapsulation; print('oqs-python 安装成功!')"
注意:我编译的 liboqs 是 0.15.0 ,而 oqs-python 仓库是 0.16.0.dev0(开发版),两者版本不一致。这可能导致 API 不兼容。
| 旧 API | 新 API |
|---|---|
public_key, secret_key = kem.generate_keypair() |
public_key = kem.generate_keypair() |
kem.encapsulate(public_key) |
kem.encap_secret(public_key) |
kem.decapsulate(ciphertext, secret_key) |
kem.decap_secret(ciphertext) |
解决方案: 变更API写法
运行示例
python
from oqs import KeyEncapsulation
# 使用 Kyber512 算法
kem_sender = KeyEncapsulation("Kyber512")
# generate_keypair() 只返回公钥(不再返回两个值)
public_key = kem_sender.generate_keypair()
# 接收方也生成密钥对
kem_receiver = KeyEncapsulation("Kyber512")
receiver_public_key = kem_receiver.generate_keypair()
# 封装(加密)- 使用 encap_secret
ciphertext, shared_secret_sender = kem_sender.encap_secret(receiver_public_key)
# 解封装(解密)- 使用 decap_secret
shared_secret_receiver = kem_receiver.decap_secret(ciphertext)
print("共享密钥一致:", shared_secret_sender == shared_secret_receiver)

试试Dilithium算法
python
from oqs import Signature
# 使用新名称 ML-DSA-65(对应原来的 Dilithium3)
sig_alg = "ML-DSA-65"
signer = Signature(sig_alg)
public_key = signer.generate_keypair()
secret_key = signer.export_secret_key()
message = b"This is a message to be signed"
signature = signer.sign(message)
is_valid = signer.verify(message, signature, public_key)
print("签名验证结果:", "通过" if is_valid else "失败")
print("公钥长度:", len(public_key), "字节")
print("私钥长度:", len(secret_key), "字节")
print("签名长度:", len(signature), "字节")

感悟
安装这个报了很多错,都是一步一步问AI;还有这个库,算法名字还变更,可恶;