在 Windows 11 WSL (Ubuntu 24.04.1 LTS) | Python 3.12.x 下部署密码学库 charm

1. 在 Windows 11 上部署 Ubuntu (WSL)

由于作者没有高性能的 Ubuntu 服务器或个人电脑,且公司或学校提供的 Ubuntu 服务器虽然提供高性能 GPU 等硬件配置但通常不会提供 root 权限,因而作者通过在搭载了 Windows 11 的个人电脑上启动 Ubuntu (WSL) 来进行指引。不使用 WSL 的读者朋友可直接跳过本节。

参考 https://learn.microsoft.com/zh-cn/windows/wsl/install 完成 WSL 功能启用重启 Windows 11 后,(以管理员身份)启动命令提示符(按下 Win 键后使用英文输入法输入 cmd 三个字母后单击“命令提示符”或“以管理员身份运行”并授权),在弹出的命令提示符窗口(以下简称“cmd 窗口”)中输入 wsl --install Ubuntu 并回车。随后,根据提示信息输入用户名(建议全部小写字母)、密码(建议十位以上的综合型密码)和确认密码。这里用户名、密码和确认密码的用途是注册,而不是登录。显示出系统信息和其它信息后,“一台” WSL 就安装完成了,我们也进入到了 WSL 中。
安装 WSL
此处,我们使用 Ubuntu 24.04.1 LTS,因为这是我个人认为所有公开的 Linux 操作系统中最好用的一个。为方便起见,用户登录到 WSL 后立即使用 sudo passwd root 命令指定 root 用户的密码。此处,第一个输入的密码为上面我们注册的用户(例如 universe)的密码,用途是确认用户授权;第二个输入的密码为为新 root 用户指定的新密码,用途为用户注册;第三个输入的密码用于再次确认第二次输入的密码,用途是确认当前用户为新 root 用户指定的新密码,防止用户键入到计算机的密码和用户希望键入到计算机的密码不一致或手误。随后,执行 su root 命令并输入密码切换到 root,执行 cd ~ 切换到 root 用户的用户目录。
su root
如有需要,执行 apt-get update && apt-get upgrade 进行一些更新和升级,在询问是否继续升级时输入 Y 并回车,也可以直接回车(默认 Y)。有需要的用户也可以更改 apt 源。
apt-get update && apt-get upgrade
apt-get update && apt-get upgrade
apt-get update && apt-get upgrade
附:如果需要退出 WSL 的登录返回到 cmd 中,可以直接在 WSL 的 shell 中执行 exit。退出后,WSL 中的数据会保留。如果哪天不需要这个 WSL 了,可以通过在 cmd 下执行 wsl --unregister Ubuntu 命令进行对 Ubuntu WSL 的注销。相比于 wsl --uninstall Ubuntuwsl --unregister Ubuntu 会清空该 WSL 中的所有数据并移除该 WSL,而 若在 wsl --uninstall Ubuntu 执行后重新执行 wsl --install Ubuntu,会发现之前的数据还在。
注销 WSL

2. 部署 Python

目前(2024 年 12 月 5 日)Ubuntu 上的情况是:

  1. 依照官方 repo 中的一个 Issue(https://github.com/JHUISI/charm/issues/307),charm 的部署需要 Python 3.10 或以下;
  2. 使用 apt-get 直接安装 Python 默认的版本是 Python 3.12,无法使用 apt-get 直接安装 Python 3.10;
  3. 使用 apt-get 直接安装 Python-dev 的默认版本是 3.12,无法使用 apt-get 直接安装 Python3.10-dev;
  4. 可以使用 wgetunziptarmake 等命令手动安装 Python 3.10,但搜索了一段时间未找到对应的 Python3.10-dev 安装方式;
  5. 无 Python-dev 部署 charm 时,提示需要 Python-dev;
  6. 有大佬适配了 Python 3.12 的 charm,位于 https://github.com/EliusSolis/charm,以后估计会被 merge 进官方的 charm。

综合以上情况,我们决定用 Python 3.12 和 https://github.com/EliusSolis/charm 中的 charm 进行部署。
直接执行 apt-get install python3 python3-dev python-is-python3,回车确认,完成安装。
安装 Python
运行 python 进行检查,发现正常。
python
输入 quit() 退出 Python,返回到 WSL 的终端。

3. GMP

翻阅 charm 官方安装说明 https://github.com/JHUISI/charm/blob/dev/README.md 可知 charm 的部署依赖于 GMP 5.x。不过,GMP 官网(https://gmplib.org/)目前最新版已经是 6.3.0 了。经测试,GMP 6.3.0 也可以,所以,此处使用 GMP 6.3.0。如果有更新版本,请相应替换本节剩余内容中的版本号。
右键单击以下网页截图中箭头指向的位置,复制链接,得到如 https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 的链接。在 Ubuntu 中执行 wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz 下载,使用 tar -xf gmp-6.3.0.tar.xztar -xvf gmp-6.3.0.tar.xz(显示详细信息)进行解压。也可以下载其它格式,参考 https://rpubs.com/xliusufe/gmp 进行解压。
在这里插入图片描述
GMP
解压后,使用 cd gmp-6.3.0 进入 gmp-6.3.0 目录。由于需要编译 C/C++ 程序以及 m4,故:

  1. 执行 apt-get install gcc g++ 安装 gcc 和 g++;
  2. 执行 apt-get install m4 安装 m4;
  3. 执行 apt-get install make 安装 make。

执行 ./configure --prefix=/usr --enable-cxx,其中,第一个参数为更改默认搜索目录为 /usr,第二个参数为启用 C++ 支持。如果提示权限不足(Permisson denied),请先尝试先执行 chmod +x ./configure;如果出现 configure: error: could not find a working compiler, see config.log for detailsconfigure: error: No usable m4 in $PATH or /usr/5bin (see config.log for reasons).Command 'make' not found 之类的错误提示,那一般就是上面的包没安装好,可以尝试重新执行上面的安装命令,或者卸载重装。
gcc 和 g++
m4
make
在命令 ./configure --enable-cxx 执行完成并成功后,依次运行 makemake checkmake install,其中,可以在 make check 时检查下是否存在错误或者警告。以下截取了 make check 过程中的一些绿色的 PASS,看着很开心。这三个命令的执行耗时累计五分钟左右。
PASS
PASS
make install
附:如果在 make install 之前想修改 ./configure 的参数,可使用 make clean 进行清理。

4. PBC

PBC 库的部署参考于 https://crypto.stanford.edu/pbc/manual.html 和 https://blog.csdn.net/Frinklin_wang/article/details/123866728。
首先,咱们打开 PBC 库的官网 https://crypto.stanford.edu/pbc/download.html,找到 Download 下面的表格中的第一个链接,右键复制。
PBC 官网
使用 cd ~ 返回 root 用户目录,执行 wget https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz 下载包。执行 tar -zxf pbc-0.5.14.tar.gztar -zxvf pbc-0.5.14.tar.gz(显示详细信息)进行解压。
PBC
执行 apt-get install flex bison 并回车确认以安装依赖的包。
flex 和 bison
使用 cd pbc-0.5.14 进入 pbc-0.5.14 目录,执行 ./configure。如果提示权限不足(Permission denied),请执行 chmod +x ./configure。在 ./configure 执行成功后,执行 make && make install
./configure
make && make install
PBC 安装结束
为测试 pbc 的正确性,使用 cd pbc 进入 pbc 目录,此时应当位于 ~/pbc-0.5.14/pbc。为方便起见,运行 vim test.txt,按下 i 键进入编辑模式,将以下内容复制粘贴进去(注意符号都是英文),随后按下键盘左上角的 ESC 键退出编辑模式,输入 :x 回车退出 vim。顺带声明一下,以下例子来自于本节开头参考的两个链接。

g:=rnd(G1);
g;h:=rnd(G2);
h;a:=rnd(Zr);
b:=rnd(Zr);
pairing(g^a,g^b);a:=rnd(Zr);
b:=rnd(Zr);
pairing(g,h)^(a*b);

cd pbc
vim
退出 vim 后,可以用 cat test.txt 查看一下 test.txt 的内容,随后,执行 ./pbc test.txt,观察结果。如无意外,一次可能的结果如下:

[3329247549575083693704544702300111878032757859527738620078340162954994153076106270578798542088759817755260473344467142914450640537953655213941777251150507, 2915725110970502014368664778822139336115812849055983709686958575727617915386111790813698074081175900851401370141481357430955279929040287141435866041352465]
[3242974909124154401306977997240035331670277658104974758958060345931843939238480034054970695129337969056110321396968088221841267448950244490146519453034952, 4102645750044991539186357580272542381470433262964030405150098834238307121213420471646007670322526602097806928211429728285753402549456577684823579495975023]
[4204905719718175991825854736739721947952505513162738068839979360094249342284680566494097041790152055409462955994730015080480413075607530213740171415894742, 446574590468230745320006695766115100785771408743827211116005662318542764154352629872772863803833470234707075454507234814615174213789732490852008370212665]
[1292042521100579230125067081486676117138594032521849019268142455404207899451482841067146153826541421710150688896771252517403929838056204610903731400443238, 6384245293263856412404284561094069320155145616120241897229969538798442361256734337315733254634859801365184035421441627651994380108240891046561604126951898]

正确性验证
可以多次执行 ./pbc test.txt,但每次结果都是随机的。
多次执行
为便于库路径管理,可依次执行以下命令。

cd /etc/ld.so.conf.d
echo '/usr/local/lib' > libpbc.conf
cat libpbc.conf
ldconfig

ldconfig

5. OpenSSL

使用 cd ~ 返回 root 用户目录。很天真地以为直接 apt-get install openssl 就可以了。
然而,但是编译错误,说找不到头文件。
参考了下 https://stackoverflow.com/questions/3016956/how-do-i-install-the-openssl-libraries-on-ubuntu,需要执行 apt-get install libssl-dev,因为要安装的是 lib。还好,也是一个命令的事情。
OpenSSL
在 https://github.com/EliusSolis/charm 中找到了链接 https://github.com/EliusSolis/charm.git,发现 Ubuntu 自带了 git。于是,直接使用 git clone https://github.com/EliusSolis/charm.git
git clone
依次执行以下命令完成部署。

# chmod +x ./configure
./configure
make install
make test

make install
执行到 make test 时出现了以下意外。

/usr/bin/python: No module named pip
error: Command '['/usr/bin/python', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmp_srxsing', '--quiet', 'pytest']' returned non-zero exit status 1.
make: *** [Makefile:51: test] Error 1

原来是,Python 3.12 的 pip 不会随着 Python 的安装而安装了。事实上,大概从这时候开始,在 Linux 操作系统上,Python 的包逐渐被 Linux 的包管理器接管,例如,安装 pandas 可能需要 apt-get install python3-pandas 而非 python -m pip install pandas 或者 pip install pandas(感觉还是以前比较方便且层次分明随后开始喜欢继续在 Windows 上运行 Python)。于是,执行 apt-get install python3-pip 并回车确认安装 pip。
继续 make test,通过。
make test
进入 Python,执行语句 from charm.toolbox.pairinggroup import PairingGroup, ZR, G1,G2, GT, pair,没有报错或警告,即,导入成功。
import
至此,charm 环境部署成功。

附录

上述实验在以下两台设备中检验通过:

  1. All the experiments conducted in this article are accomplished on 11th Gen Intel® Core™ i7-11800H CPU 2.30 GHz 8 cores, NVIDIA GeForce RTX 3060 Laptop GPU, 24 GB RAM, 512 GB SSD, and 1024 GB SSD under Windows 11 Pro 24H2 x64. The operating system is on the 512 GB SSD while the codes and the datasets are on the 1024 GB SSD.
  2. All the experiments conducted in this article are accomplished on the AMD Ryzen 7 7735H with Radeon Graphics (8 cores), 16 GB RAM, and 512 GB SSD under Windows 11 Pro 24H2 x64.

准确一点,可能是:

  1. All the experiments conducted in this article are accomplished on the Ubuntu 24.04.1 LTS platform via the Windows subsystem for Linux (WSL) under the 11th Gen Intel® Core™ i7-11800H CPU 2.30 GHz 8 cores, NVIDIA GeForce RTX 3060 Laptop GPU, 24 GB RAM, 512 GB SSD, and 1024 GB SSD under Windows 11 Pro 24H2 x64. The operating system is on the 512 GB SSD while the codes and the datasets are on the 1024 GB SSD.
  2. All the experiments conducted in this article are accomplished on the Ubuntu 24.04.1 LTS platform via the Windows subsystem for Linux (WSL) under the AMD Ryzen 7 7735H with Radeon Graphics (8 cores), 16 GB RAM, and 512 GB SSD under Windows 11 Pro 24H2 x64.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/62087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt自定义 Qt Designer 插件

创建 Qt Designer 插件项目 Qt 提供两种设计插件的 API,可以用于扩展 Qt 的功能。高级 API 用于设计插件以扩展 Qt 的功能,例如定制数据库驱动、图像格式、文本编码、定制样式等。Qt Designer 里大量采用了插件,点击 Qt Creator 的“Help”-…

springboot利用easypoi实现简单导出Excel

vue springboot利用easypoi实现简单导出 前言一、easypoi是什么?二、使用步骤 1.传送门2.前端vue3.后端springboot 3.1编写实体类(我这里是dto,也一样)3.2控制层结尾 前言 今天玩了一下springboot利用easypoi实现excel的导出,以前…

【学习总结|DAY012】Java面向对象基础

一、前言 今天主要学习了以下内容:面向对象的理解与使用、对象的内存布局、构造器的概念和作用、封装的重要性以及JavaBean实体类的实现等。下面我将详细阐述这些知识点。 二、面向对象的理解与使用 1. 什么是面向对象? 类:一种特殊的数据…

【免费】最新区块链钱包和私钥的助记词碰撞器,bybit使用python开发

使用要求 1、用的是google里面的扩展打包成crx文件,所以在使用之前你需要确保自己电脑上有google浏览器,而且google浏览器版本需要在124之上。(要注意一下,就是电脑只能有一个Chrome浏览器) 2、在win10上用vscode开发…

【AI模型对比】AI新宠Kimi与ChatGPT的全面对比:技术、性能、应用全揭秘

文章目录 Moss前沿AI技术背景Kimi人工智能的技术积淀ChatGPT的技术优势 详细对比列表模型研发Kimi大模型的研发历程ChatGPT的发展演进 参数规模与架构Kimi大模型的参数规模解析ChatGPT的参数体系 模型表现与局限性Kimi大模型的表现ChatGPT的表现 结论:如何选择适合自…

C#实时监控指定文件夹中的动态,并将文件夹中生成的新图片显示在界面上(相机采图,并且从本地拿图)

结果展示 此类原理适用于文件夹中自动生成图片,并提取最新生成的图片将其显示, 如果你是相机采图将其保存到本地,可以用这中方法可视化,并将检测的结果和图片匹配 理论上任何文件都是可以监视并显示的,我这里只是做了…

Unity性能优化---动态网格组合(二)

在上一篇中,组合的是同一个材质球的网格,如果其中有不一样的材质球会发生什么?如下图: 将场景中的一个物体替换为不同的材质球 运行之后,就变成了相同的材质。 要实现组合不同材质的网格步骤如下: 在父物体…

深入解析Spring AI框架:在Java应用中实现智能化交互的关键

众所周知,Java是一种面向对象的编程语言,因此不论我们调用什么AI接口,从业务的角度来看,它本质上只是一个接口,而AI则充当了一个第三方对接平台。然而,值得注意的是,AI的聊天回复往往不适用于对…

idea 自动导包,并且禁止自动导 *(java.io.*)

自动导包配置 进入 idea 设置,可以按下图所示寻找位置,也可以直接输入 auto import 快速定位到配置。 Add unambiguous imports on the fly:自动帮我们优化导入的包Optimize imports on the fly:自动去掉一些没有用到的包 禁止导…

基于C++实现的(控制台)双人俄罗斯方块小游戏

基于win32控制台应用程序的双人俄罗斯方块小游戏 1. 课题概述 1.1 课题目标和主要内容 使用visual studio 2015在win32控制台应用程序下用多线程实现双人同时进行俄罗斯方块的桌面游戏。最终将要完成的效果如图1.1所示,左右共两片工作区,也是游戏的主…

Python subprocess.run 使用注意事项,避免出现list index out of range

在执行iOS UI 自动化专项测试的时候,在运行第一遍的时候遇到了这样的错误: 2024-12-04 20:22:27 ERROR conftest pytest_runtest_makereport 106 Test test_open_stream.py::TestOpenStream::test_xxx_open_stream[iPhoneX-xxx-1-250] failed with err…

力扣1401. 圆和矩形是否有重叠

用矢量计算&#xff1a; class Solution { public:bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {//矩形中心float Tx(float)(x1x2)/2;float Ty(float)(y1y2)/2;//强行进行对称操作&#xff0c;只考虑第一象限if(xCenter<Tx)…

信号和槽思维脑图+相关练习

将登录框中的取消按钮使用信号和槽的机制&#xff0c;关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为"123456",如果账号密码匹配成功&#xff0c;当前界面关…

第一部分:基础知识 2. SQL基础 --[MySQL轻松入门教程]

第一部分:基础知识 2. SQL基础 --[MySQL轻松入门教程] SQL(Structured Query Language)是一种用于管理和处理关系型数据库的标准语言。它被广泛应用于各种数据库系统,如MySQL, PostgreSQL, Oracle, SQL Server等。下面是一些SQL的基础知识和常用操作示例。 1.SQL简介 SQ…

《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024

摘要 这篇论文介绍了S2VNet&#xff0c;这是一个用于医学图像分割的通用框架&#xff0c;它通过切片到体积的传播&#xff08;Slice-to-Volume propagation&#xff09;来统一自动&#xff08;AMIS&#xff09;和交互式&#xff08;IMIS&#xff09;医学图像分割任务。S2VNet利…

源码可运行-PHP注册登录源码,PHP实现登陆后才能访问页面

最近有一个项目需要实现会员注册和页面登陆后才能访问&#xff0c;所以简单的HTML是无法实现的&#xff0c;就必须通过PHP、html和Mysql来实现&#xff0c;先给大家看一下登录和注册页的效果图。&#xff08;注册完成后会自动跳转到登录窗口&#xff0c;即使A用户登陆后分享了网…

性能测试常见面试问题和答案

一、有没有做过性能测试&#xff0c;具体怎么做的 性能测试是有做过的&#xff0c;不过我们那个项目的性能做得不多&#xff0c;公司要求也不严格。一般SE 给我们相关的性能需求&#xff0c;首先我们需要对性能需求进行场景分析与设计&#xff0c;这里&#xff0c;其实主要就是…

二百七十八、ClickHouse——将本月第一天所在的那一周视为第一周,无论它是从周几开始的,查询某个日期是本月第几周

一、目的 ClickHouse指标表中有个字段week_of_month&#xff0c;含义是这条数据属于本月第几周。 而且将本月第一天所在的那一周视为第一周&#xff0c;无论它是从周几开始的。比如2024-12-01是周日&#xff0c;即12月第一周。而2024-12-02是周一&#xff0c;即12月第二周 二…

【OCR】——端到端文字识别GOT-OCR2.0不香嘛?

代码&#xff1a;https://github.com/Ucas-HaoranWei/GOT-OCR2.0?tabreadme-ov-file 在线demo&#xff1a;https://huggingface.co/spaces/stepfun-ai/GOT_official_online_demo 0.前言 最早做ocr的时候&#xff0c;就在想如何能做一个端到端的模型&#xff0c;就不用先检测再…

AndroidStudio-常见界面控件

一、Button package com.example.review01import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextViewclass Review01Activity : AppCompatActivity() {override fun onCreate(savedInstanceStat…