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

相关推荐
高频因子挖掘机1 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
鬼手点金2 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
阿里嘎多学长3 小时前
2026-10-12 GitHub 热点项目精选
开发语言·程序员·github·代码托管
jack186893 小时前
Devin 智能软件工程师实战应用指南
windows
伍六琪4 小时前
github 2FA认证教程
github
鸿蒙开发6 小时前
我把自己的应用上线了:从买服务器、域名和 DNS,到备案与 HTTPS
后端·github
Hello_Pyhx6 小时前
WinDirStat 2.9.3:从目录扫描到可复查的占用报表
windows·mac·垃圾清理
邱杰4706 小时前
数智人事系统(十一):Spring Boot + MyBatis-Plus 的 CRUD 落地
后端·github
邱杰4706 小时前
数智人事系统(十三):考勤打卡与出勤日历
后端·github
jun_bai7 小时前
使用Aspose实现word文档合并,内容替换
windows·c#·word