开放原子训练营(第一季)铜锁探密:基于铜锁,在前端对登录密码进行加密,实现隐私数据保密性

news2024/11/16 21:23:28

本文将基于 铜锁(tongsuo)开源基础密码库实现前端对用户登录密码的加密,从而实现前端隐私数据的保密性。

首先,铜锁密码库是一个提供现代密码学算法和安全通信协议的开源基础密码库,在中国商用密码算法,例如 SM2、SM3、SM4、祖冲之等密码算法方面提供强大的能力。除此之外,对国际主流算法、同台加密算法等密码学也提供了功能。更多详细的功能,请参考官方文档。

接下来,我会在 docker 环境中,基于 Ubuntu 20.04 容器镜像,结合 nodejs 实现对用户登录密码的加密。

安装 docker

首先,请先下载并安装 docker。点击链接转到下载地址。

我使用的是 macOS 系统,因此,我这里选择的是 macOS 版本的 docker。请根据自身系统选择相应的版本。

在这里插入图片描述

安装 docker 成功之后,打开你的命令行工具,并执行如下命令,创建一个 docker 容器:

docker run -d -it --name tongsuolab ubuntu:20.04 bash

上述代码中,创建了一个名为 tongsuolab 的 ubuntu20.04 容器,如下图所示:
å
此时,打开 docker 的应用程序,你也能在 docker 的 Containers 页面中找到:
在这里插入图片描述
接着,继续在命令行中执行如下命令,进入 docker 容器:

docker exec -it tongsuolab bash

在这里插入图片描述
至此,你就将 docker 的安装成功,并成创建容器。

下载铜锁密码库

我们将在容器中下载同事密码库。因为 ubuntu 自带 apt 命令,因此可以用过 apt 命令安装 git 命令下载铜锁密码库,并通过 make 命令编译它。

现在,我们先更新软件包索引,执行如下命令:

apt update

在这里插入图片描述

接着安装 git gcc, make, nodejs 开发工具

apt install git gcc make -y

在这里插入图片描述
现在,我们已经安装好了 git 工具。因此,可以使用 git 命令克隆铜锁密码库的代码,执行如下命令:

git clone https://github.com/Tongsuo-Project/Tongsuo

在这里插入图片描述
接着,对铜锁密码库进行一些配置,进入到 Tongsuo 文件夹下,执行如下命令:

cd Tongsuo
./config --prefix=/opt/tongsuo enable-ntls enable-ssl-trace -Wl,-rpath,/opt/tongsuo/lib64
--debug

在这里插入图片描述

最后,执行如下命令进行编译和安装:

make -j
make install

至此,你就将铜锁密码库成功安装了。你也可以通过如下命令查看安装情况:

ls -l /opt/tongsuo

在这里插入图片描述
以及通过 /opt/tongsuo/bin/tongsuo version 命令查看铜锁密码库的版本:
在这里插入图片描述

编写前端代码

安装开发环境

在前端中,我们将通过 nodejs 实现对用户登录密码的加密。本文中,我们将使用 SM3 和 SM4 两种方式进行演示。

由于 ubuntu20.04 版本中没有安装 NodeJS,因此我们还需要通过 apt 命令安装,执行如下命令:

apt install nodejs
node -v
v10.19.0
apt install npm
npm -v

但是,在 ubuntu20.04 中 nodejs 的最高版本被限制在了 10.19.0 ,不是最新的版本。因此,我们还需要更新 nodejs 的版本。

通过以下命令对 nodejs 的版本进行更新:

apt install curl

npm install n -g

n stable

在这里插入图片描述
当你执行 n stable 命令的时候,会提示 the node command changed location and the old location may be remembered in your current shell.

它的意思是虽然 nodejs 新版本安装了,但是系统记住的还是老版本的 nodejs。

这个时候,只需要执行下面这条命令即可切换为 新版本的 nodejs:

hash -r

在这里插入图片描述
到了这里,你已经成功底安装了前端需要的环境。但是,我们还需要编辑文件,因此还需要安装 vim 工具,执行如下命令:

apt install vim

编写代码

现在,我们来开始编写代码。要在前端中执行 shell 语句,一般通过第三方依赖包执行更方便,这里推荐使用 shelljs

现在,在命令行中创建一个名为 webapp 的文件夹:

mkdir webapp

在这里插入图片描述

接着,进入到 webapp 文件夹中,通过 vim 命令创建并编辑 index.js 文件:

vim index.js

此时会在命令行中打开 index.js,然后我们输入如下内容:
在这里插入图片描述
上述代码中,可以看到,我们使用 shelljs 来执行铜锁密码库的 sm3 和 sm4 加密。但是现在你还运行不了 index.js,或者说运行了会报错。因为我们还没有安装 shelljs 依赖库。

因此,在 webapp 文件夹下执行如下命令安装 shelljs

// 初始化 package.json 文件
npm init -y
// 安装 shelljs
npm install shelljs

安装成功后,我们再再 webapp 文件夹中执行如下命令执行 index.js

node index.js

此时,你会发现命令行中输入了如下结果,表示我们成功借助铜锁密码库对用户的登录密码进行了加密。
在这里插入图片描述

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

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

相关文章

vcruntime140_1.dll无法继续执行代码怎么修复

vcruntime140_1.dll 是 Microsoft Visual C 程序集中的一个动态链接库文件。该文件提供了一些 C 运行时函数,这些函数是由许多应用程序使用的。当一个程序需要某个 DLL 文件时,它会首先在系统目录和程序所在目录中查找该 DLL 文件。如果系统或程序目录中…

《密码法》

第一章 总 则 第一条 为了规范密码应用和管理,促进密码事业发展,保障网络与信息安全,维护国家安全和社会公共利益,保护公民、法人和其他组织的合法权益,制定本法。 第二条 本法所称密码,是指采用特定变…

JavaSE基础(三)—— 程序流程控制、Random随机数

目录 一、顺序结构 二、分支结构 1. if 1.1 if分支有三种格式​编辑 2. switch 2.1 if、switch分支各自适合做什么业务场景 3. switch的穿透性 三、循环结构 1. for 循环​编辑 2. while 循环 2.1 什么时候用for循环,什么时候用while循环 3. do-while循…

探索抖音全域兴趣电商的特点与优势

抖音全域兴趣电商是抖音在电商领域的一项创新业务。它是一种全新的购物方式,通过抖音平台提供的社交化购物体验,将用户的兴趣、购物需求和商品展示相结合,为用户提供更为个性化、精准的购物体验。下面四川不若与众将对抖音全域兴趣电商进行一…

uboot start_armboot函数 第二阶段代码分析

1.1、start_armboot函数简介 这个函数整个构成了uboot启动的第二阶段。 1.2、uboot第二阶段做的事情 uboot第一阶段主要就是初始化了SoC内部的一些部件(譬如看门狗、时钟、串口…),然后初始化DDR并且完成重定位。那么,uboot的第…

Win10配置ESP32-IDF+VSCode开发环境

一、安装包下载: Git:Git for WindowsPython:Download Python | Python.org以Windows x86-64开头的是 64 位的 Python 安装程序;以Windows x86开头的是 32 位的 Python 安装程序。ESP-IDF(选择Offline版本&#xff09…

【微机原理】8088/8086的寻址方式

目录 一.指令的组成 二.操作数的寻址方式 1.立即数寻址 2.寄存器寻址方式 3.存储器寻址方式 (1)直接寻址 (2)寄存器间接寻址 (3)寄存器相对寻址方式 (4)基址变址寻址方式&#xff08…

基于zookeeper实现分布式锁

目录 zookeeper知识点复习 相关概念 java客户端操作 实现思路分析 基本实现 初始化链接 代码落地 优化:性能优化 实现阻塞锁 监听实现阻塞锁 优化:可重入锁 zk分布式锁小结 zookeeper知识点复习 Zookeeper(业界简称zk&#xff…

【Linux】多路转接--select、poll、epoll,非阻塞等待

1.IO的概念 IO等拷贝数据 等&#xff1a;发送缓冲区满了或者接受缓冲区没有数据&#xff0c;就需要等待 高效IO就是&#xff1a;减少单位时间内,"等"的比重 2. 阻塞IO和非阻塞IO 2.1.阻塞IO 阻塞等待会在read的地方等待 #include <iostream> #include &l…

JavaScript实现输入数字,输出是几月份的代码

以下为实现输入数字&#xff0c;输出是几月份的代码和运行截图 目录 前言 一、实现输入数字&#xff0c;输出是几月份的 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择&#xff0c;您可以在目录里进行快速查找&#xff1b; 2.本…

1699_simulink代码生成配置初级方案

全部学习汇总&#xff1a; GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

数据库篇:初始化、建表、配置及调用

微信小程序云开发实战-答题积分赛小程序 数据库篇:初始化、建表、配置及调用 开通云开发服务 点击【云开发】,开通云开发服务; 开通服务完成后,方可继续往下操作; 题库数据表初始化 创建数据表 点击【数据库】,然后点击【+】创建数据表;

彻底告别手动配置任务,魔改xxl-job!

分析 改造 1、接口调用 2、创建新注解 3、自动注册核心 4、自动装配 测试 测试后 XXL-Job是一款非常优秀的任务调度中间件&#xff0c;其轻量级、使用简单、支持分布式等优点&#xff0c;被广泛应用在我们的项目中&#xff0c;解决了不少定时任务的调度问题。不仅如此&a…

RabbitMQ 简单模型

MQ引言 1.1 什么是MQ ​ MQ(Message Quene) : 翻译为消息队列,通过典型的生产者和消费者模型,生产者不断向消息队列中生产消息&#xff0c;消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的&#xff0c;而且只关心消息的发送和接收&#xff0c;没有业务逻辑的侵…

chatGPT+Midjourney制作绘画本

chatGPTMidjourney制作绘画本 灵感来源&#xff1a;https://www.bilibili.com/video/BV1N24y1F7ga/?spm_id_from888.80997.embed_other.whitelist&vd_source6dd97671c42eb7cf111063714216bd0b 最终效果&#xff1a; 绘本故事 故事塑造能力弱的人可以使用chatGPT来帮助编…

wait/waitpid函数等待子进程状态发生改变

&#x1f38a;【进程通信与并发】专题正在持续更新中&#xff0c;进程&#xff0c;线程&#xff0c;IPC&#xff0c;线程池等的创建原理与运用✨&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列…

【自看】2023前端面试上岸手册——VUE部分

目录 Vue 的基本原理双向数据绑定的原理MVVM、MVC、MVP 的区别slot 是什么&#xff1f;有什么作用&#xff1f;原理是什么&#xff1f;\$nextTick 原理及作用Vue 单页应用与多页应用的区别Vue 中封装的数组方法有哪些&#xff0c;其如何实现页面更新Vue data 中某一个属性的值发…

商品管理系统【控制台+MySQL】(Java课设)

系统类型 控制台类型Mysql数据库存储数据 使用范围 适合作为Java课设&#xff01;&#xff01;&#xff01; 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址&#xff1a;https://download.csdn.net/download/qq_50954361/87738976 更多系统资源库地…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-匝道跟车基础功能

书接上回 2.3.3匝道辅助驾驶 匝道辅助驾驶功能根据导航引导在ODD范围内辅助驾驶车辆进出匝道,主动变道并入或开出主路,并可根据导航路线引导车辆通过跨高速连接路。 前置条件: 1)驾驶员设置导航目的地及导航路线 2)开启辅助驾驶功能,系统进入NOA功能 2.3.3.1.上下匝道…

如何设计一个可扩展的优惠券功能

本文主要分享了如何设计一个可扩展的优惠券功能。 一、功能特性介绍 1.每个条件的代码独立&#xff0c;相当于单独的实现类实现接口&#xff0c;就能通过配置添加到优惠券条件校验当中&#xff0c;支持多种条件灵活组合 2.新增一种使用条件可以不修改核心流程代码&#xff0…