WSL 搭建深度学习环境,流程基本上是一样的,完整细节可参考我之前的博客:

在WSL2-Ubuntu中安装CUDA12.8、cuDNN、Anaconda、Pytorch并验证安装_cuda 12.8 pytorch版本-CSDN博客

之所以记录下来,是因为CUDA和cuDNN版本升级后,部分安装细节有调整(便捷度提升),所以单独开篇记录。



一、引言

因需安装依赖本地CUDA编译的软件包,需完整部署CUDA Toolkit、cuDNN及PyTorch环境。从CUDA12.9版本起,NVIDIA支持通过Anaconda安装cuDNN,故调整流程为先装Anaconda(前置)→再装CUDA13.0→接着装cuDNN9.12→最后装PyTorch,确保版本适配且操作高效,关键步骤附官方及实操参考链接,保障可复现性。



二、前提条件(Windows端+WSL端)

(一)Windows系统准备

  1. 安装NVIDIA官方显卡驱动(需支持CUDA13.0,版本≥535.xx):打开Windows cmd,执行nvidia-smi,确认输出中“CUDA Version”≥13.0;
  2. 启用WSL2并安装Ubuntu系统(推荐22.04/24.04 LTS):终端执行wsl --list --verbose,确认WSL版本为2;
  3. (可选)安装Microsoft Visual Studio:用于跨平台编译需求,参考CUDA官方前置要求。

(二)WSL2-Ubuntu准备

  1. 配置网络:开启系统代理(避免下载缓慢,参考WSL2怎么设置网络自动代理);
  2. 权限与更新:确保拥有sudo权限,执行系统更新命令:
    sudo apt update && sudo apt upgrade -y
    


三、第一步:安装Anaconda(前置核心步骤)

WSL - Linux 安装 Anaconda3-2025.06-0 详细教程 [WSL 分发版均适用]_wsl安装anaconda-CSDN博客

3.1 下载Anaconda安装包

  1. 从Anaconda官网查询最新Linux版本(截至2025年8月,推荐Anaconda3-2025.07-Linux-x86_64.sh);
  2. 终端执行下载命令(保存至/tmp目录,避免占用用户目录):
    wget -P /tmp https://repo.anaconda.com/archive/Anaconda3-2025.07-Linux-x86_64.sh
    

3.2 运行安装脚本

  1. 执行安装命令:
    bash /tmp/Anaconda3-2025.07-Linux-x86_64.sh
    
  2. 交互操作:
    • ENTER翻页阅读许可协议,直至出现“Do you accept the license terms? [yes|no]”,输入yes
    • 确认安装路径(默认/home/[用户名]/anaconda3,推荐默认),按ENTER
    • 询问“是否初始化Anaconda到shell”,必须输入yes(自动配置环境变量,为后续conda安装cuDNN铺路)。

3.3 验证Anaconda安装

  1. 生效环境变量:关闭当前终端并重新打开,或执行source ~/.bashrc(Zsh用户为source ~/.zshrc);
  2. 验证命令:
    conda --version  # 输出如“conda 25.7.0”,说明conda命令可用
    conda env list   # 显示base环境及路径,确认环境正常
    

参考链接:在 Windows 11 下的 WSL - Ubuntu 24.04 中安装 Anaconda3



四、第二步:安装CUDA13.0 Toolkit

4.1 验证WSL与GPU通信

终端执行nvidia-smi,确认输出中“CUDA Version”≥13.0(若未显示,需更新Windows端显卡驱动)。

nvidia-smi

无需登录(关闭登录窗口即可)

CUDA 与 cuDNN 免登录下载政策详解(基于官方权威信息)_cudnn下载-CSDN博客

CUDA Toolkit 13.0 Downloads | NVIDIA Developer

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install cuda-toolkit-13-0

4.2 下载并安装CUDA密钥环

  1. 执行下载命令(从NVIDIA WSL-Ubuntu专属仓库获取):
    (base) love@AI:~$ wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
    
    • 下载日志:
      --2025-08-24 11:31:34--  https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
      Connecting to 127.0.0.1:7897... connected.
      Proxy request sent, awaiting response... 200 OK
      Length: 4328 (4.2K) [application/x-deb]
      Saving to: ‘cuda-keyring_1.1-1_all.deb’
      cuda-keyring_1.1-1_all.deb    100%[=================================================>]   4.23K  --.-KB/s    in 0s
      2025-08-24 11:31:36 (912 MB/s) - ‘cuda-keyring_1.1-1_all.deb’ saved [4328/4328]
      
  2. 安装密钥环(确保后续CUDA包来源可信):
    (base) love@AI:~$ sudo dpkg -i cuda-keyring_1.1-1_all.deb
    
    • 安装日志(关键片段):
      [sudo] password for love:
      Selecting previously unselected package cuda-keyring.
      (Reading database ... 40769 files and directories currently installed.)
      Preparing to unpack cuda-keyring_1.1-1_all.deb ...
      Unpacking cuda-keyring (1.1-1) ...
      Setting up cuda-keyring (1.1-1) ...
      

4.3 更新软件源并安装CUDA13.0

  1. 更新软件包列表:
    (base) love@AI:~$ sudo apt-get update
    
    • 更新日志(关键片段):
      Hit:1 http://security.ubuntu.com/ubuntu noble-security InRelease
      Hit:2 http://archive.ubuntu.com/ubuntu noble InRelease
      Get:3 http://archive.ubuntu.com/ubuntu noble-updates InRelease [126 kB]
      Get:4 https://developer.download.nvidia.cn/compute/cuda/repos/wsl-ubuntu/x86_64  InRelease [1581 B]
      Fetched 3275 kB in 4s (741 kB/s)
      Reading package lists... Done
      
  2. 安装CUDA13.0 Toolkit(指定版本避免自动升级):
    (base) love@AI:~$ sudo apt-get -y install cuda-toolkit-13-0
    
    • 安装过程:系统自动下载3389 MB依赖包(含cuda-cccl-13-0cuda-nvcc-13-0等核心组件),最终提示“Setting up cuda-toolkit-13-0 (13.0.0-1) …”,表示安装完成。

4.4 配置CUDA环境变量

  1. 编辑shell配置文件(以Bash为例):
    nano ~/.bashrc
    
  2. 在文件末尾添加以下内容(指定CUDA13.0安装路径):
    export PATH=/usr/local/cuda-13.0/bin:$PATH
    export LD_LIBRARY_PATH=/usr/local/cuda-13.0/lib64:$LD_LIBRARY_PATH
    export CUDA_HOME=/usr/local/cuda-13.0
    
  3. 保存并生效:按Ctrl+X→输入Y→按ENTER,执行source ~/.bashrc

4.5 验证CUDA13.0安装

nvcc -V  # 输出如“Cuda compilation tools, release 13.0, V13.0.48”
ls /usr/local/cuda-13.0  # 显示bin、lib64、include等目录,确认安装完整性

参考链接:在 Windows 11 下的 WSL - Ubuntu 24.04 中安装 CUDA 的记录;

官方指引:CUDA下载(WSL-Ubuntu deb_network方式)



五、第三步:安装cuDNN9.12(Anaconda方式)

CUDA 深度神经网络库 (cuDNN) | NVIDIA 开发者

同样是免登录下载和安装。

官方文档更新未及时,注意修改“cuda-version=”的版本号。

一般 cuDNN 能自动降级适配CUDA,但较老的 cuDNN 版本可能无法向后兼容较新版本的 CUDA 。

cuDNN 安装命令:

conda install nvidia::cudnn cuda-version=13

或者:

conda install nvidia::cudnn=9.12 cuda-version=13

5.1 激活Anaconda环境

  1. 确保处于base环境(终端前缀显示(base)),若未激活执行:
    conda activate base
    
  2. (可选)创建独立虚拟环境(推荐,避免污染base环境):
    conda create -n cuda13_env python=3.13  # 适配Python 3.13版本
    conda activate cuda13_env
    

5.2 通过conda安装cuDNN9.12

  1. 执行安装命令(指定与CUDA13.0兼容的cuDNN9.12版本):
    (base) love@AI:~$ conda install nvidia::cudnn=9.12 cuda-version=13
    
  2. 安装日志(关键片段):
    Channels:- defaults- nvidia
    Platform: linux-64
    Collecting package metadata (repodata.json): done
    Solving environment: done
    ## Package Plan ##environment location: /home/love/anaconda3added / updated specs:- cuda-version=13- nvidia::cudnn=9.12
    The following NEW packages will be INSTALLED:cuda-version       pkgs/main/noarch::cuda-version-13.0-hbda6634_3cudnn              nvidia/linux-64::cudnn-9.12.0.46-h2b6041c_0libcudnn           nvidia/linux-64::libcudnn-9.12.0.46-h24322f0_0libcudnn-dev       nvidia/linux-64::libcudnn-dev-9.12.0.46-h2b6041c_0
    Proceed ([y]/n)? y
    Downloading and Extracting Packages:
    Preparing transaction: done
    Verifying transaction: done
    Executing transaction: done
    

5.3 验证cuDNN9.12安装

  1. 查看conda已安装包:
    conda list | grep cudnn  # 输出“cudnn                     9.12.0.46          h2b6041c_0    nvidia”
    
  2. 检查库文件路径(conda环境内):
    ls $CONDA_PREFIX/lib/libcudnn*  # 显示libcudnn.so、libcudnn_static.a等文件
    

参考链接:Windows 11 系统下,通过 WSL 里的 Ubuntu 24.04 安装 CUDNN 记录;

CUDA与cuDNN适配说明:是否需要预先安装CUDA Toolkit?



六、第四步:安装PyTorch(适配CUDA13.0)

Get Started

pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu129

6.1 执行安装命令

从PyTorch官方仓库(https://download.pytorch.org/whl/cu129 )安装适配CUDA13.0的版本(CUDA向下兼容,cu129包支持CUDA13.0):

(base) love@AI:~$ pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu129

6.2 安装日志(关键片段)

Looking in indexes: https://download.pytorch.org/whl/cu129
Collecting torchDownloading https://download.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (30 kB)
Collecting torchvisionDownloading https://download.pytorch.org/whl/cu129/torchvision-0.23.0%2Bcu129-cp313-cp313-manylinux_2_28_x86_64.whl.metadata (6.1 kB)
# 自动下载依赖(nvidia-cuda-nvrtc-cu12、nvidia-cudnn-cu12等)
Downloading https://download.pytorch.org/whl/cu129/torch-2.8.0%2Bcu129-cp313-cp313-manylinux_2_28_x86_64.whl (1240.3 MB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 GB 1.9 MB/s eta 0:00:00
Successfully installed nvidia-cublas-cu12-12.9.1.4 ... torch-2.8.0+cu129 torchvision-0.23.0+cu129 triton-3.4.0


七、第五步:完整验证深度学习环境

验证PyTorch深度学习环境Torch和CUDA还有cuDNN是否正确配置的命令-CSDN博客

验证代码示例(python环境):

import torch  # 导入 PyTorch 库print("PyTorch 版本:", torch.__version__)  # 打印 PyTorch 的版本号# 检查 CUDA 是否可用,并设置设备("cuda:0" 或 "cpu")
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print("设备:", device)  # 打印当前使用的设备
print("CUDA 可用:", torch.cuda.is_available())  # 打印 CUDA 是否可用
print("cuDNN 已启用:", torch.backends.cudnn.enabled)  # 打印 cuDNN 是否已启用# 打印 PyTorch 支持的 CUDA 和 cuDNN 版本
print("支持的 CUDA 版本:", torch.version.cuda)
print("cuDNN 版本:", torch.backends.cudnn.version())# 创建两个随机张量(默认在 CPU 上)
x = torch.rand(5, 3)
y = torch.rand(5, 3)# 将张量移动到指定设备(CPU 或 GPU)
x = x.to(device)
y = y.to(device)# 对张量进行逐元素相加
z = x + y# 打印结果
print("张量 z 的值:")
print(z)  # 输出张量 z 的内容

7.1 Python交互模式验证(核心步骤)

  1. 终端进入Python环境:
    (base) love@AI:~$ python
    Python 3.13.5 | packaged by Anaconda, Inc. | (main, Jun 12 2025, 16:09:02) [GCC 11.2.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
  2. 执行验证代码:
    import torch
    # 1. 验证版本信息
    print("PyTorch 版本:", torch.__version__)  # 输出“2.8.0+cu129”
    print("支持的 CUDA 版本:", torch.version.cuda)  # 输出“12.9”(向下兼容CUDA13.0)
    print("cuDNN 版本:", torch.backends.cudnn.version())  # 输出“91204”(对应cuDNN9.12)# 2. 验证GPU可用性
    print("CUDA 可用:", torch.cuda.is_available())  # 输出“True”
    print("cuDNN 已启用:", torch.backends.cudnn.enabled)  # 输出“True”
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    print("当前设备:", device)  # 输出“cuda:0”
    print("GPU 设备名:", torch.cuda.get_device_name(0))  # 输出GPU型号(如“NVIDIA GeForce RTX 4090”)# 3. 验证GPU张量运算(核心功能验证)
    x = torch.rand(5, 3).to(device)  # 创建随机张量并转移到GPU
    y = torch.rand(5, 3).to(device)
    z = x + y  # GPU上执行张量相加
    print("GPU 张量运算结果:\n", z)
    
  3. 预期输出(示例):
    PyTorch 版本: 2.8.0+cu129
    支持的 CUDA 版本: 12.9
    cuDNN 版本: 91204
    CUDA 可用: True
    cuDNN 已启用: True
    当前设备: cuda:0
    GPU 设备名: NVIDIA GeForce RTX 4090
    GPU 张量运算结果:tensor([[1.0225, 1.4994, 1.9415],[0.8256, 1.4385, 1.3833],[0.8874, 0.4490, 1.1313],[1.4452, 0.3707, 1.2173],[0.8632, 1.1795, 1.0678]], device='cuda:0')
    

7.2 额外验证(可选,确保编译功能)

  1. 验证CUDA编译器:
    nvcc --version  # 确认CUDA编译器正常,支持本地编译
    
  2. 验证conda环境与系统CUDA协同:
    echo $CUDA_HOME  # 输出“/usr/local/cuda-13.0”,确认环境变量生效
    echo $LD_LIBRARY_PATH | grep $CONDA_PREFIX/lib  # 确认conda的cuDNN路径被识别
    


八、注意事项与常见问题

  1. 版本兼容性
    • 确保cuDNN版本(9.12)与CUDA13.0匹配,可通过NVIDIA cuDNN兼容性表查询;
    • Python版本推荐3.9~3.13,避免过高版本导致依赖包不兼容。
  2. 网络问题
    • 若conda/pip下载缓慢,配置国内镜像(如清华conda镜像:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/nvidia/);
    • 若CUDA源无法访问,替换为中科大CUDA源:sudo sed -i 's/developer.download.nvidia.com/mirrors.ustc.edu.cn\/nvidia-cuda/' /etc/apt/sources.list.d/cuda.list
  3. 编译报错处理
    • 若报错“nvcc not found”,重新执行source ~/.bashrc
    • 若报错“libcudnn.so not found”,激活conda环境(conda activate cuda13_env)并执行export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH


九、结语

本文完成WSL2-Ubuntu中Anaconda→CUDA13.0→cuDNN9.12→PyTorch的完整部署,通过实操日志和多维度验证,确保环境支持本地CUDA编译与GPU加速深度学习任务。后续可基于此环境安装依赖CUDA的自定义软件包(如深度学习框架插件、自定义算子),直接用于模型训练与推理开发。



参考链接汇总

  1. Anaconda安装:https://aicity.blog.csdn.net/article/details/144737143?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
  2. CUDA13.0安装:https://aicity.blog.csdn.net/article/details/144735570?spm=1011.2415.3001.10575&sharefrom=mp_manage_link;
  3. 官方指引:https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=WSL-Ubuntu&target_version=2.0&target_type=deb_network
  4. cuDNN9.12安装:https://aicity.blog.csdn.net/article/details/144734627?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
  5. 网络代理配置:https://blog.csdn.net/u014451778/article/details/146073726?sharetype=blog&shareId=146073726&sharerefer=APP&sharesource=u014451778&sharefrom=link
  6. CUDA Toolkit场景说明:https://aicity.blog.csdn.net/article/details/148660071?spm=1011.2415.3001.10575&sharefrom=mp_manage_link
  7. PyTorch下载源:https://download.pytorch.org/whl/cu129

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

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

相关文章

OpenFOAM中梯度场的复用(caching)和生命期管理

文章目录OpenFOAM中梯度场的复用(caching)和生命期管理一、缓存机制的目标二、如何实现缓存(以 fvc::grad 为例)1. 使用 IOobject::AUTO_WRITE 和注册名2. 示例:fvc::grad 的缓存实现(简化逻辑)三、生命期管理是如何实…

【Hot100】贪心算法

系列文章目录 【Hot100】二分查找 文章目录系列文章目录方法论Hot100 之贪心算法121. 买卖股票的最佳时机55. 跳跃游戏45. 跳跃游戏 II763. 划分字母区间方法论 Hot100 之贪心算法 121. 买卖股票的最佳时机 121. 买卖股票的最佳时机:给定一个数组 prices &#…

电子电气架构 --- 软件项目复杂性的驾驭思路

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

SSE实时通信与前端联调实战

1.SSE 原理机制 sse 类似websocket,但是sse是单向的,不可逆的,只能服务端向客户端发送数据流 2.解决跨域问题 Access to XMLHttpRequest at http://127.0.0.1:8090/sse/doChat from origin http://127.0.0.1:3000 has been blocked by CORS policy: Re…

从传统到创新:用报表插件重塑数据分析平台

一、传统 BI 平台面临的挑战 在当今数字化时代,数据已成为企业决策的重要依据。传统的商业智能(BI)平台在数据处理和分析方面发挥了重要作用,但随着数据量的爆炸式增长和用户需求的日益多样化,其局限性也逐渐显现。 …

MySQL--MySQL中的DECIMAL 与 Java中的BigDecimal

1. 为什么需要 DECIMAL在数据库中,常见的数值类型有:INT、BIGINT → 整数,存储容量有限。FLOAT、DOUBLE → 浮点数,存储效率高,但存在精度丢失问题。DECIMAL(M, D) → 定点数,存储精确值。例子:…

低空无人机系统关键技术与应用前景:SmartMediaKit视频链路的基石价值

引言:低空经济的新兴格局 低空经济作为“新质生产力”的代表,正在从政策驱动、技术突破和市场需求的共振中走向产业化。2023年,中国低空经济的市场规模已超过 5000 亿元人民币,同比增长超过 30%。无人机(UAV&#xff…

在Windows系统上升级Node.js和npm

在Windows系统上升级Node.js和npm,我推荐以下几种方法: 方法1:使用官网安装包(最简单) 访问 nodejs.org 下载Windows安装包(.msi文件) 运行安装包,选择"修复"或直接安装新…

【Jetson】基于llama.cpp部署gpt-oss-20b(推理与GUI交互)

前言 本文在jetson设备上使用llama.cpp完成gpt-oss 20b的部署,包括后端推理和GUI的可视化交互。 使用的设备为orin nx 16g(super),这个显存大小推理20b的模型完全没有问题。 使用硬件如下,支持开启super模式。&#…

Matplotlib 可视化大师系列(一):plt.plot() - 绘制折线图的利刃

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列(一):plt.plot() - 绘制折线图的利刃一、 plt.plot() 是什么?二、 函数原型与核心参数核心参数详解三、 从入门到精通:代码示例示例 1:最基…

第二阶段Winfrom-8:特性和反射,加密和解密,单例模式

1_预处理指令 (1)源代码指定了程序的定义,预处理指令(preprocessor directive)指示编译器如何处理源代码。例如,在某些情况下,我们希望编译器能够忽略一部分代码,而在其他情况下&am…

【开题答辩全过程】以 微信小程序的医院挂号预约系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

鸿蒙ArkUI 基础篇-06-组件基础语法-Column/Row/Text

目录 掌握组件写法,使用组件布局界面 ArkUI与组件 先布局再内容 DevEco Studio代码实战 预览效果 总结 练习 掌握组件写法,使用组件布局界面 ArkUI与组件 ArkUI(方舟开发框架):构建 鸿蒙 应用 界面 的框架 组件…

8.27 网格memo

lc329计算矩阵中最长递增路径长度尝试从矩阵每个位置出发,int dfs() 往上下左右四个方向找严格递增的路径retmax(ret,dfs(x,y)1);return memo[i][j]ret;返回所有路径里的最长长度 class Solution {public:int dx[4]{0,0,1,-1};int dy[4]{1,-1,0,0};int m,n;vector&l…

flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践

flume监控文件写入 Kafka 实战:解耦应用与消息队列的最佳实践 在日志采集场景中,直接让应用程序通过 log4j2 写入 Kafka 会导致应用与 Kafka 强耦合(如 Kafka 故障可能影响应用运行)。更优的方案是:应用程序将日志写入…

从浏览器无法访问到Docker容器的 FastAPI 服务地址【宿主机浏览器和容器不在同一个网络层面:端口映射】

文章目录1. 问题根源:Docker 网络模型2. 解决方案:端口映射(Port Mapping)方法 1:重新运行容器并添加端口映射(推荐)方法 2:获取宿主机的 IP 进行访问(特定情况&#xff…

线性代数中矩阵等价与离散数学中关系的闭包之间的关联

最近在重温线性代数时,学到矩阵的等价的定义及其性质,发现其性质与离散数学中关系的闭包所要满足的性质非常相似,不由的让人不怀疑这二者之间存在某种关联,从而引发以下的思考:从deepseek的回答中我明白了矩阵的等价其…

从MyJUnit反思Java项目的工程实践(版本控制篇)

从 MyJUnit 反思Java项目的工程实践(版本控制篇) 参考资料 deepseekgithub copilotCSDN-Git代码管理工作流程:GitFlow详解Conventional Commits手册封面来自 qwen-image 遵循 git flow 分支管理模型 Git Flow 是一种围绕项目发布的核心分支模型, 它规定了不同的开发…

小工具推荐

小工具 ​ 平时不太喜欢去搜罗一些好用的工具,但是看到自己感兴趣的还是会记下来,有的是github上的开源项目,有的是一些直接在线的工具。主要是除了工作时间也不知道去干点什么,或者是和朋友玩玩游戏,或者是city walk…

【js】加密库sha.js 严重漏洞速查

前言sha.js 是 JavaScript 生态里最常用的轻量级加密库。它由 Browserify 社区维护,体积不足 20 KB,却实现了 SHA-1、SHA-224、SHA-256、SHA-384、SHA-512 全系列算法,是 crypto-browserify、webpack、web3.js 等数百个流行包的“根依赖”。而…