Windows安装liboqs库

前置

  • 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;还有这个库,算法名字还变更,可恶;

相关推荐
怕浪猫3 小时前
FDE 最大的浪费不是写出有 bug 的代码,而是漂亮地解决了一个错误的问题
面试·架构·github
黄敬峰6 小时前
Next.js 全栈实战:数据清洗、ORM 设计与 AI Prompt 工程最佳实践
面试·github
峰向AI10 小时前
AI reads books:用 AI 逐页「啃」PDF 的知识提取器,一个脚本搞定一切
github
Experience-摆渡12 小时前
GitHub 47万星免费公共API清单深度调研:收录规模、维护现状与实测
github
逛逛GitHub12 小时前
GitHub 上 2.5 万星星的开源 Skill 让 AI 画出漂亮图表。
github
Cosolar13 小时前
一文弄懂 Agent Harness 与 Agent Runtime 的区别
java·后端·github
YH552698413 小时前
如何减少大模型的token消耗?日常使用,可以通过什么方式减少大模型 token 的消耗
gpt·chatgpt·github
阿里嘎多学长13 小时前
2026-08-29 GitHub 热点项目精选
开发语言·程序员·github·代码托管
smileNicky14 小时前
GitHub Pull Request 指南:从 Fork 到 Merge 的图文实战教程
github
郝学胜-神的一滴14 小时前
C++11 工程级应用 06:自己造一个类似Python的Range迭代器
开发语言·c++·windows·python·程序人生·microsoft