实习日志20

1.找了很多sm3、sm4加密算法相关的库

1.1.sm4算法编码和解码可以在webstorm中直接执行

1.2.封装的真好,活字格里用不了一点

1.3.把sm3和sm4加密算法源码读透后剥离出来加入到活字格的资源管理器中即可使用

把调用函数改为活字格支持的普通函数

2.sm3加密改法

2.1.改函数


// module.exports = function (input, options) {
//   input = typeof input === 'string' ? utf8ToArray(input) : Array.prototype.slice.call(input)
//
//   if (options) {
//     const mode = options.mode || 'hmac'
//     if (mode !== 'hmac') throw new Error('invalid mode')
//
//     let key = options.key
//     if (!key) throw new Error('invalid key')
//
//     key = typeof key === 'string' ? hexToArray(key) : Array.prototype.slice.call(key)
//     return ArrayToHex(hmac(input, key))
//   }
//
//   return ArrayToHex(sm3(input))
// }
// sm3加密
function sm3Encrypt(input, options) {
  input = typeof input === 'string' ? utf8ToArray(input) : Array.prototype.slice.call(input)

  if (options) {
    const mode = options.mode || 'hmac'
    if (mode !== 'hmac') throw new Error('invalid mode')

    let key = options.key
    if (!key) throw new Error('invalid key')

    key = typeof key === 'string' ? hexToArray(key) : Array.prototype.slice.call(key)
    return ArrayToHex(hmac(input, key))
  }

  return ArrayToHex(sm3(input))
}

2.2.调用

/**
 * SM3 算法加密
 *
 * @param {string} paramStr - 待加密字符串
 * @returns {string} - 返回加密后,固定长度=32的16进制字符串
 */
function encodeSM3(paramStr) {
    try {
        const resultHexString = sm3Encrypt(paramStr);
        return resultHexString;
    } catch (error) {
        console.error('Encryption error:', error);
        return '';
    }
}

3.sm4加密、解密改法

3.1.改函数

/**
 * sm4加密
 */
function sm4Encrypt(inArray, key, options) {
  return sm4(inArray, key, 1, options)
}

/**
 * sm4解密
 */
function sm4Decrypt(inArray, key, options) {
  return sm4(inArray, key, 0, options)
}

3.2.文件有俩

3.3.调用

加密

/**
 * SM4 算法加密
 *
 * @param {string} paramStr - 待加密字符串
 * @returns {string} - 返回加密后,固定长度=32的16进制字符串
 */
function encodeSM4(paramStr) {

    /* 密钥,32位十六进制数字 */
    // const key_sm4 = '密钥';
    // const plaintext = `keqingrong@outlook.com`;
    // const key_sm4 = token; //密钥key == 授权值token
    // const key_sm4 = '密钥'; //密钥key == 授权值token
    // console.log('key:' + key_sm4);

    // 默认 ECB 模式
    const encrypted = sm4Encrypt(paramStr, key_sm4);
    // const decrypted = sm4Decrypt(encrypted, key_sm4);
    // // console.log(encrypted); 
    // // console.log(decrypted === plaintext); // true

    // // CBC 模式
    // /* 初始化向量,32位十六进制数字 */
    // const iv = '密钥';
    // const iv = token;
    // //加密
    // const encrypted2 = sm4.encrypt(plaintext, key, {
    //     iv,
    //     mode: 'cbc'
    // });
    // //解密
    // const decrypted2 = sm4.decrypt(encrypted2, key, {
    //     iv,
    //     mode: 'cbc'
    // });
    // // console.log(encrypted2); // 加密后
    // // console.log(decrypted2 === plaintext); // true
    return encrypted;
}

解密:

注:此处还加了个base64解密

/**
 * data解密解密
 *
 * @param data 加密且编码的data
 * @returns {string} 返回json格式的data数据
 */
function decodeData(data) {
    // sm4解密
    const sm4Data = decodeSM4(data);
    // console.log('sm4Data: ' + sm4Data)

    //base64解码
    // 判断数据是否是有效的Base64字符串
    if (isValidBase64(sm4Data)) {
        //是有效的Base64字符串
        //解密
        const jsonData = Base64.decode(sm4Data);
        // console.log('jsonData:', jsonData);
        return jsonData;
    } else {
        console.error('Invalid Base64 string:', sm4Data);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3组件通信方式汇总

前言:本文默认读者有JS基础和Vue基础,如果没有这个两个基础,可能阅读比较困难,建议先看下官方文档,当然,也欢迎评论交流😁 通信方式总结 常见搭配形式 一、props(使用频率最高&#…

PNPM 批量检查和更新项目依赖

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

LabVIEW声速测定实验数据处理

LabVIEW声速测定实验数据处理 介绍了一个基于LabVIEW的声速测定实验数据处理系统的应用。该系统利用LabVIEW的强大数据处理和分析能力,通过设计友好的用户界面和高效的算法,有效提高了声速测定实验的数据处理效率和准确性。通过这个案例,可以…

P6354 [COCI2007-2008#3] TAJNA

题目传送门 题目描述 使用一种加密算法。 设字符串的长度为 n,则构造一个矩阵,使得 rcn 且在 r≤c 的情况下使得 r 尽量大。 然后把给定的明文按照由上到下,从左到右的顺序填充这个 rc 的矩阵。 得到的密文就是把矩阵按照从左到右&#…

pytorch数学运算

目录 1. pytorch的数学运算包括2. 基本运算3. matmul4. power sqrt rsqrt5. exp log6. 近似值7. clamp 1. pytorch的数学运算包括 ▪Add/minus/multiply/divide ▪Matmul ▪Pow ▪Sqrt/rsqrt ▪Round 2. 基本运算 、-、*、/ 也可以使用函数add sub mul div 3. matmul 矩阵…

Excel练习:双层图表

Excel练习:双层图表 学习视频Excel制作双层图表,很多人都不会,其实只需1步操作就够了!_哔哩哔哩_bilibili ​​ 通过调整两个图形的显示范围实现 增加折现图的负数显示范围,使折现图仅出现在整体图形的上方增加柱形…

VSCODE使用Django 页面和渲染

https://code.visualstudio.com/docs/python/tutorial-django#_use-a-template-to-render-a-page 通过模板渲染页面 文件 实现步骤 1, 修改代码,hello的App名字增加到installed_apps表中。 2, hello子目录下,创建 .\templates\…

什么是矩阵的秩?如何计算矩阵的秩?(done)

什么是矩阵的秩?https://search.bilibili.com/all?vt21986927&keyword%E4%BB%80%E4%B9%88%E6%98%AF%E7%9F%A9%E9%98%B5%E7%9A%84%E7%A7%A9%EF%BC%9F&from_sourcewebtop_search&spm_id_from333.1007&search_source5 矩阵本质上是线性方程组。但是方…

dockerfile文件书写

1.dockerfile构建nginx镜像 1.1书写dockerfile文件 mkdir nginx #创建nginx目录 cd nginx vim dockerfile # 修改文件FROM centos # 基础镜像,默认最新的centos8操作系统 MAINTAINER xianchao # 指定镜像的作者信息 RUN rm -rf /etc/yum.repos.d/* # centos8默认…

【label studio 升级记录】

label studio 版本升级记录 label studio 从1.8.1 升级到1.11.0 过程记录启动后遇到问题1:解决方法: 遇到问题2 安装版本与启动显示的版本不一致解决方法: label studio 从1.8.1 升级到1.11.0 过程记录 # 当前(2024-02)最新版是1.11.0 pip install -U label-studio启动后遇到…

【Python】OpenCV-图片添加水印处理

图片添加水印处理 1. 引言 图像处理中的水印添加是一种常见的操作,用于在图片上叠加一些信息或标识。本文将介绍如何使用OpenCV库在图片上添加水印,并通过详细的代码注释来解释每一步的操作。 2. 代码示例 以下是一个使用OpenCV库的简单代码示例&…

强化学习入门(Matlab2021b)-创建环境【2】

目录 1 前言2 利用step和reset函数创建自定义环境2.1 对象描述2.2 reset函数2.3 step函数2.3 构建自定义环境3 使用匿名函数传递额外的参数4 可视化检查自定义函数的输出参考链接1 前言 本文介绍如何基于MATLAB编写step、reset函数,创建自己的强化学习环境(Environment)。 使…

手撕qsort函数

前言 本篇主要讲解的是qsort函数细节以及运用实例。 紧跟我的脚步一起手撕qsort函数吧~ 欢迎关注​​个人主页:逸狼 更多优质内容: 拿捏c语言指针(上) 拿捏c语言指针(中) 拿捏c语言指针(下&…

Https证书续签-acme.sh-腾讯云之DnsPod

ename 域名切换到 DnsPod 上面解析 可以先看下之前的 acme.sh 介绍文章然后再来次补充更多。 之前说过了 acme.sh 在阿里云下的使用。 这里做个后续补充 之前的域名是在 ename 上的 ,为了自动续签切换到 DnsPod 上面解析 注意事项 可以把原来 ename 上的解析先导出…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson 15 At the Department Store 在百货商店

《美语从头学初级入门篇》 注意:被 删除线 划掉的不一定不正确,只是不是标准答案。 文章目录 Lesson 15 At the Department Store 在百货商店会话A会话B笔记 Lesson 15 At the Department Store 在百货商店 会话A A: Can you help me, please? B: Sur…

电脑任务栏一直转圈圈怎么办 电脑底部任务栏卡死桌面没事的解决办法

最近有一些用户反映,自己的电脑底部任务看卡死桌面没事,不知道是什么原因,也不清楚应该如何解决,是由于资讯和兴趣页面加载时卡死导致的,将其关闭后即可解决,以下是小编提供的电脑任务栏一直转圈圈的解决方…

java 使用documents4j将XML转为pdf文件的方式

1.背景: 通过spire.doc.free将word转换成PDF时存在缺陷:只能获取前3页。获取全文另外需支付费用。 2.解决办法 使用documents4j,documents4j会保留原word文件中更多的样式,如修订模式下的差异化字体颜色、文档右侧修订记录等。 …

Paddlepaddle使用自己的VOC数据集训练目标检测(0废话简易教程)

一 安装paddlepaddle和paddledection(略) 笔者使用的是自己的数据集 二 在dataset目录下新建自己的数据集文件,如下: 其中 xml文件内容如下: 另外新建一个createList.py文件: # -- coding: UTF-8 -- imp…

K8s ingress-nginx根据请求目录不同将请求转发到不同应用

K8s ingress-nginx根据请求目录不同将请求转发到不同应用 1. 起因 有小伙伴做实验想要实现以下需求: 输入www.pana.com/app1访问app1的svc 输入www.pana.com/app2访问app2的svc 2. 实验 2.1 Dockerfile 先准备Dockerfile FROM nginx:1.20ADD index.html /usr/share/ngin…

长短期记忆神经网络

目录 LSTM 神经网络架构 分类 LSTM 网络 回归 LSTM 网络 视频分类网络 更深的 LSTM 网络 网络层 分类、预测和预报 序列填充、截断和拆分 按长度对序列排序 填充序列 截断序列 拆分序列 指定填充方向 归一化序列数据 无法放入内存的数据 可视化 LSTM 层架构 …