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

相关推荐
AdCj32 小时前
GitHub 日榜速递 (2026-06-08):AI 基础设施正在“下沉“(技术分析版)
人工智能·github·agent
CJH(本人账号)2 小时前
AI Agent 安全危机:当你的“智能助手“变成攻击者的“远程武器“
网络·人工智能·安全·ai·开源·github
caimouse2 小时前
Reactos 第 5 章 进程与线程 — 5.1 概述
c语言·windows·架构
玖釉-2 小时前
nvpro_core2 详解:NVIDIA Vulkan / OpenGL 图形样例背后的现代 C++ 基础库
c++·windows·图形渲染
独隅2 小时前
Git/GitHub/GitLab/Gitee 核心对比指南
git·gitlab·github
用户074740781652 小时前
web.py:一个简单到极致的 Python Web 框架
github
用户813609341492 小时前
pre-commit:一套框架管好所有 Git 提交检查
github
天衍四九2 小时前
Git从0到实战(二):Git 的日常工作流 —— 你真的会用了吗?
github
七牛云行业应用2 小时前
GitHub Copilot 2026年6月新计费实战:AI Credits怎么算、怎么省
人工智能·github·copilot