系统离线license验证的方法
为了解决系统私有化部署,完全离线的情况下,如何验证 license 的问题。 需要考虑以下几个方面:
系统需要支持离线验证,即在没有网络连接的情况下也能进行 license 验证。
需要保证 license 验证的准确性,防止被篡改或伪造。
需要考虑 license 的过期时间、使用次数等限制条件,并确保在离线情况下也能进行验证。
需要确保系统绑定在一台设备上,防止 license 被盗用。
1. 实现原理使用私钥签名,公钥验签的方式进行验证。在系统部署时,生成一个密钥对,使用私钥对信息签名。同时将公钥提供给用户,用于验证签名。用户在购买 license 时,使用私钥对 license 进行签名,并将签名后的 license 发送给用户。用户在安装 license 时,使用公钥对 license 进行验签,验证其有效性。签名的过程
对自定义信息+随机字符串(密钥)进行加密
使用私钥对加密后的信息进行签名
将密钥+加密信息长度+加密信息+签名作为 license
2. 具体实现 Nodejs 代码2.1 生成密钥对1234const NodeRSA = require(&qu ...
uniapp 的 Android 端获取照片的MD5
使用spark-md5这个包计算文件的 md5 值,但是在 Uniapp 安卓端没有 FileReader 这个方法。
可以利用 plus.io.FileReader 读取照片 base64 内容,然后再计算 md5
代码12345678910111213141516171819202122232425/** * 获取照片 md5 */function getMD5(path) { return new Promise((resolve, reject) => { plus.io.resolveLocalFileSystemURL(path, entry => { var fileReader = new plus.io.FileReader(); fileReader.readAsDataURL(entry); fileReader.onloadend = function (evt) { // base64图片,比如:data:image/jpeg;base64,/9j/4AAQ ...
strapi 从 controller 中上传文件
官网中关于上传文件的介绍只介绍了如何在前端上传文件,但是在后端上传文件的需求也是很常见的,比如在 controller 中上传文件。
上传文件在 controller 或 service 中上传文件,需要使用 strapi 的 service 中的 upload 方法,具体使用方法如下:
123456789101112131415161718192021import fse from "fs-extra";import path from "path";import os from "os";//需要把文件放到临时文件夹中const tmpWorkingDirectory = await fse.mkdtemp(path.join(os.tmpdir(), "strapi-upload-"));const fileName = Date.now() + ".jpg"; // 根据实际情况修改文件名const tmpFilePath = path.join(tmpWorkingDirect ...
如何使用 Python 抓取华为摄像头的抓拍图片
华为摄像头提供了抓拍图片的 API,但是返回的数据是 multipart 格式的,需要进行解析。本文将介绍如何使用 Python 抓取华为摄像头的抓拍图片。
获取抓拍图片首先,我们需要使用 HTTP Digest Authentication 认证方式,向华为摄像头的 API 发送 POST 请求,获取抓拍图片。以下是示例代码:
1234567891011121314import requestsimport jsonusername = '******' # 替换为实际的用户名password = '******' # 替换为实际的密码url = 'https://ip/SDCAPI/V1.0/Storage/Snapshot/SnapAction'uuid = "a234feaf-7751-99fa-72b1-9d8357e6d26f" # 替换为实际的 UUIDpayload = json.dumps({"UUID": uuid})headers = ...
使用Nodejs对Minio对象存储中图片压缩
利用 Minio 的通知功能,在有图片上传后,通知到 Nodejs 服务,压缩图片再上传
项目地址https://github.com/houxiaozhao/minio-compresses-images
主要使用的库
minio - Minio 的 Nodejs 客户端
sharp - 图片压缩库
koa - Nodejs 的 web 框架
bull - Nodejs 的队列库
流程
因为 sharp 的处理图片速度比较慢,所以使用了队列,将图片压缩的任务放到队列中,然后再从队列中取出任务,进行压缩。
主要压缩的代码1234567const minioClient = new minio.Client(config.minio);console.time(job.id + "流处理时间");const readable = await minioClient.getObject(bucket, key);const pipeline = sharp({ unlimited: true, sequentialRead: true }).j ...
Nodejs中Buffer和Stream互转
Stream to Buffer12345678function streamToBuffer(stream) { return new Promise((resolve, reject) => { let buffers = []; stream.on("error", reject); stream.on("data", (data) => buffers.push(data)); stream.on("end", () => resolve(Buffer.concat(buffers))); });}
Buffer to Stream1234567let Duplex = require("stream").Duplex;function bufferToStream(buffer) { let stream = new Duplex(); stream.push(buffer); stream.p ...
Hexo博客框架介绍和使用部署
官网介绍:快速、简介且高效的博客框架
基于 Node.js 的静态博客框架,可以方便的生成静态网页托管在 GitHub 上
特点
速度很快,上百个页面在几秒内完成渲染
一键部署,可以链接 github,一键部署到 github page
插件和可扩展
快速开始安装
安装 hexo 命令行工具
npm install hexo-cli -g
使用命令行工具初始化
hexo init blog
安装依赖
npm install
运行
hexo server
配置网站信息打开_config.yml
可以配置网站标题、作者、语言等。
新建一篇文章使用命令
hexo new <title>
然后在 source/_posts 目录下会生成一个 md 文档
生成静态网页hexo generate
会生成在 public 目录下,直接部署该目录到服务器或其他位置即可
也可以上传到 github 上,利用 github page 做一个免费的网站
创建一个仓库名字是.github.io
然后在 setting->pages 中设置
把静态网 ...
strapi介绍
官网介绍:开源的 Headless CMS,100% 的 javascript 和完全可定制化
CMS:内容管理系统,比如 WordPress
Headless CMS :无头 内容管理系统。内容仅通过 API 进行访问,而不需要内置前端。
可以用来创建网站,APP,API 等,可以用作后端系统管理内容,也可以配合 Vue、React 等前端技术结合使用。
即使不了解后端开发技术,也可以创建 API 接口
特点
使用一个命令就可以生成后端 restfull api 服务,除了 rest,甚至还支持 graphQL API
yarn create strapi-app my-project –quickstart
可以在内置的后端管理界面对数据库进行管理。添加表后自动生成对应增删改查接口
内置的权限系统,全部数据都由权限系统控制
插件化,内置基本插件:内容管理器,api 文档,媒体库,角色权限等
自定义 API,可以使用 JavaScript 自定义 API
支持多种数据库
快速开始安装需要有 node 环境,一句命令即可安装,
yarn create ...
效率工具Utools使用介绍-个人向
官网上介绍的是:新一代效率工具平台
自由组合插件应用,打造专属你的趁手工具集
我就介绍一下我的使用经验
软件有很多插件,可以自由组合安装。
剪贴板,使用频率最高的工具。其实世面上有不少的历史剪贴板的软件,但是 all in one 总是好的 提示:不要使用官方提供的剪贴板插件(收费)使用第三方的一个 因为使用频率高,可以设置全局快捷键 ctrl+`
Ctool 包含程序开发的常用工具。内置工具非常丰富![image]这些工具都可以直接在 Utools 窗口进入
翻译(易翻翻译)直接在 Utools 窗口输入内容,然后选择翻译即可。可以配置不同的翻译服务(需要去不用平台申请 key)甚至还有 Coding 模式,直接翻译成驼峰,下划线等风格的变量名
其他常用的简单介绍
局域网共享文件
备忘快贴
计算稿纸
网页快开
颜色助手
前后端密钥传输和数据加密(国密SM2、SM3、SM4)流程实践
加密算法介绍非对称密码算法 SM2SM2 椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括 SM2-1 椭圆曲线数字签名算法,SM2-2 椭圆曲线密钥交换协议,SM2-3 椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。
对称密码算法 SM4SM3 杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。
杂凑算法 SM3SM4 分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。
密钥传输流程
前端到后端加密传输前端加密拦截前端请求,对请求中的 body 使用 SM3 计算哈希,然后把哈希值和明文数据拼接,再使用 SM2 公钥对数据进行加密传输。公式如下:SM2(SM3(明文)+明文)
123456{ method: payload.method, url: url, data: { data: sm2.doEncrypt(sm3(JSON.stringify(payloa ...