本文将基于 铜锁(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
此时,你会发现命令行中输入了如下结果,表示我们成功借助铜锁密码库对用户的登录密码进行了加密。