简介

本文记录我参加开放原子训练营(第一季)铜锁探密活动,学习铜锁密码库和国密加密算法后,完成的小作品。

先简单介绍一下作品内容: Web在线加密工具库是一种提供加密算法在线使用的工具库,可以帮助用户快速、方便地加密数据。下面将介绍如何基于铜锁构建Web在线加密工具库,并使用docker快速部署。

铜锁介绍

铜锁/Tongsuo是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。

构建应用

初始化项目

使用Goland作为IDE,先创建一个react项目。
在这里插入图片描述
后端我们可以使用hertz框架,hertz是字节推出的Web框架,使用简单,适合快速搭建Web应用程序。

编写Dockerfile

为了更方便的使用tongsuo,我使用docker来安装铜锁库,整个应用也跑在docker中,不会对我们本地的环境有影响,非常方便
首先,在docker中构建一个基于ubuntu镜像的环境,安装必要的依赖包,包括go、nodejs和tongsuo。然后,编译tongsuo以确保其能够正常运行。

封装铜锁API接口

在环境搭建完成后,由于铜锁目前还没有go的sdk,参考了一些大佬的思路,可以利用go编写命令,使用命令行来调用安装好的tongsuo库。
go执行shell调用shell
封装好工具类后,我们可以将铜锁API封装成RESTful API,来方便前端来调用。

构建前端页面

使用react和antd构建前端页面,实现简单的用户界面。用户可以在页面上输入需要加密的数据,选择加密算法,并将加密结果显示在页面上。

这里在开发时有一个细节,就是前后端跨域问题。前端使用的是create-react-app, 可以安装 http-proxy-middleware

npm install --save-dev http-proxy-middleware 

然后再src目录下创建文件setupProxy.js

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
    app.use('/api',
        createProxyMiddleware({
            target: 'http://127.0.0.1:8888',
            changeOrigin: true,
        })
    );
};

这样我们的前端运行在3000端口,通过代理准发后,变成'http://127.0.0.1:8888' 就不会出现跨域的问题了。不过这里要注意,请求后端接口的函数,请求地址千万不要写死,要写相对路径。如果写死,这个代理的端口是不会生效的。

打包前端静态资源

我们打包前端为静态资源后,为了方便访问,直接把静态资源放在后端目录下,然后编写hertz的静态文件路由:
静态文件路由
让go的服务器直接帮我们代理静态资源,直接访问后端的端口http://localhost:8888,就可以访问我们的密码箱应用了。

编写docker-compose.yml快速部署

使用docker-compose.yml文件描述应用程序的容器,包括后端API容器和前端页面容器,并设置相关参数,如端口号、环境变量等。使用docker-compose up -d命令,可以快速部署整个应用程序。

项目预览

完成部署后,您可以使用浏览器访问Web在线加密工具库,并使用提供的加密算法实现数据加密。在页面上输入需要加密的数据,选择加密算法,并点击“加密”按钮,加密结果将显示在页面上。
在这里插入图片描述

项目地址 t-camp加密工具箱

总结

本文介绍了如何基于铜锁构建Web在线加密工具库,并使用docker快速部署。通过封装铜锁API接口和构建前端页面,我们实现了一个简单的Web应用程序,可以帮助用户快速、方便地加密数据。

关于铜锁探秘活动,我觉得非常不错,让我一个的小白,了解并学习了我们平时https中TLS加密过程,还有颁发服务器,浏览器CA证书等一系列过程。整个学习过程都有铜锁训练营的老师详细带大家动手实践。

铜锁完全兼容openssl的API,所以大家不用担心在使用上有更多的学习成本,或者从openssl迁移会比较麻烦。但是现在铜锁存在的问题,我感觉文档还是不够完善,对于不同平台可能存在的bug,环境等问题,文档还是比较单一,具体怎么使用方面,最佳实践还是比较少,例子不够丰富,对于初学者而来说,使用起来还是比较困难的,希望铜锁能不断完善文档。另外还有各种语言的SDK,目前支持了python, PHP, Java.希望官方可以尽快推出其它语言的SDK,方便开发者使用。

我非常期待开放原子系列的活动,让国产的开源项目不断走到我们的生产开发中。而我作为开源项目的贡献值,非常支持!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐