【安全与协议】使用crypto.js进行加密详解

2023-11-15

JavaScript Crypto-JS 前言与工具

→ 前言
使用 Crypto-JS 可以非常方便地在 JavaScript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密

→ 下载引用
可以在这个GitHub的 https://github.com/brix/crypto-js 上下载该js,它可以单独引入所需要加密方式的js;也可以引入一个crypto-js.js 这个文件,它相当于引入了所有的加密方式

→ Crypto-js在线工具
基于 Crypto-JS 实现的在线加密解密工具 —— 在线哈希、在线散列在线加密、在线解密

使用 Crypto-JS 进行哈希、散列

① md5

﹟简介:
MD5算法是广泛使用的杂凑函数,也就是哈希函数,英文全拼是:Message Digest Algorithm,其特点如下:

  • 一个任意长度的数据,经过MD5计算后就会得到一个长度固定的十六进制字符串;
  • MD5算法消耗较低,不会在性能在造成压力;
  • 抗修改性很强,相差极小的两个原数据的MD5值差异会很大
  • 抗碰撞性也很强,伪造数据的难度很大

这里解释一下抗碰撞性。抗碰撞性是相对与碰撞攻击讲,碰撞攻击指两个不同的原数据在算法加密后得到了相同的值。MD5具有很强的抗碰撞性(此处看了不少资料,好像王小云教授的算法已经能够破解MD5的防碰撞性)。

﹟两种引入 md5.js方式(之后的就直接一起写)

import CryptoJS from 'crypto-js/md5'

<script src="cryptojs/rollups/md5.js"></script>

﹟调用 md5 方法

var str = '123456';
CryptoJS.MD5(str);

② pbkdf2

﹟简介:
pbkdf2是一个基于密码的密钥派生函数。在许多密码学应用中,用户安全最终依赖于密码,由于密码通常不能直接用作密钥,因此需要进行一些处理。

salt库为任何给定的密码提供了大量的密钥集,而迭代计数增加了从密码生成密钥的成本,从而增加了攻击的难度。

﹟引入 pbkdf2.js

import CryptoJS from 'crypto-js/pdkdf2'

<script src="cryptojs/rollups/pbkdf2.js"></script>

﹟调用 pbkdf2 方法

// 官方示例
var str = '123456';
var salt = CryptoJS.lib.WordArray.random(128/8);
 
var key128Bits = CryptoJS.PBKDF2(str, salt, { keySize: 128/32 });
var key256Bits = CryptoJS.PBKDF2(str, salt, { keySize: 256/32 });
var key512Bits = CryptoJS.PBKDF2(str, salt, { keySize: 512/32 });
 
var key512Bits1000Iterations = CryptoJS.PBKDF2("Secret Passphrase", salt, {
keySize: 512/32,
iterations: 1000
});

③ ripemd160

﹟简介:
RIPEMD-160 是 160 位加密哈希函数。 它旨在用于替换 MD4 和 MD5,RIPEMD 的 128 位哈希函数。RIPEMD建立在md的基础之上,所以,其添加数据的方式和md5完全一样

﹟引入 ripemd160.js

import CryptoJS from "crypto-js/ripemd160";

<script src="cryptojs/rollups/ripemd160.js"></script>

﹟调用 ripemd160 方法

var str = '123456';
CryptoJS.RIPEMD160(str);

④ sha 系列:sha1、sha256、sha384、sha514…

﹟简介:
Salt ProvidersSha哈希函数由国家安全局(NSA)设计。sha-1是现有的sha散列函数中最成熟的,它被用于各种安全应用程序和协议中。尽管如此,随着新的攻击被发现或改进,sha-1的抗碰撞能力一直在减弱。

sha-256是sha-2中的四种变体之一。虽然看起来它提供了更好的安全性,但它并没有sha-1广泛使用。

sha-512在很大程度上与sha-256相同,但操作时使用的是64位字,而不是32位字。

CryptoJS还支持sha-224和sha-384,它们基本相同,但分别是sha-256和sha-512的截断版本。

SHA-3是一项为期五年的选择新密码散列算法竞赛的获胜者,该算法对64个竞争设计进行了评估。

可以将sha-3配置为输出224、256、384或512位之一的哈希长度。默认值为512位

﹟引入 sha 相关 js

import CryptoJS from "crypto-js/sha1";
...
import CryptoJS from "crypto-js/sha256";
import CryptoJS from "crypto-js/sha384";
import CryptoJS from "crypto-js/sha514";

<script src="cryptojs/rollups/sha1.js"></script>
...
<script src="cryptojs/rollups/sha256.js"></script>
<script src="cryptojs/rollups/sha384.js"></script>
<script src="cryptojs/rollups/sha512.js"></script>

﹟调用 sha 相关方法

var str = '123456';
CryptoJS.SHA1(str);
 
var str = '123456';
CryptoJS.SHA3(str);
 
// 配置输出的哈希长度
CryptoJS.SHA3(str, {outputLength : 224});
CryptoJS.SHA3(str, {outputLength : 256});
CryptoJS.SHA3(str, {outputLength : 384});
CryptoJS.SHA3(str, {outputLength : 512});
 
var str = '123456';
CryptoJS.SHA224(str);
 
var str = '123456';
CryptoJS.SHA256(str);
 
var str = '123456';
CryptoJS.SHA284(str);
 
var str = '123456';
CryptoJS.SHA512(str);

⑤ hmac 系列:hmac_md5、hmac_ripemd160、hmac_sha1、hmac_sha3…

﹟简介:
基于哈希的消息身份验证代码 (HMAC) 可以用于确定是否通过不安全通道发送的消息已被篡改,前提是在发送方和接收方共享机密密钥。 发件人计算原始数据的哈希值,并将原始数据和 HMAC 传送一条消息。 接收方重新计算对收到的消息哈希值,并检查计算哈希值与传输的哈希值相匹配。

HMAC 可以用于任何迭代的加密哈希函数,例如 MD5 或 SHA-1,与共享密钥结合使用。 HMAC 的加密强度取决于基础的哈希函数的属性。

对数据或哈希值进行任何更改会导致不匹配,因为更改消息和重新生成的正确哈希值需要机密密钥。 因此,如果原始和计算所得的哈希值匹配,该消息进行身份验证。

﹟引入 hmac 相关 js

import CryptoJS from "crypto-js/hmac-md5";
import CryptoJS from "crypto-js/hmac_ripemd160";
import CryptoJS from "crypto-js/hmac-sha1";
import CryptoJS from "crypto-js//hmac-sha3";

<script src="cryptojs/rollups/hmac-md5.js"></script>
<script src="cryptojs/rollups/hmac_ripemd160.js"></script>
<script src="cryptojs/rollups/hmac-sha1.js"></script>
<script src="cryptojs/rollups/hmac-sha3.js"></script>

﹟调用 hmac 相关 方法

var str = '123456';
var password = 'password';
 
// Hmac 相关调用前都增加了 Hmac
CryptoJS.HmacMD5(str, password);
CryptoJS.HmacRIPEMD160(str, password);
CryptoJS.HmacSHA1(str, password);
CryptoJS.HmacSHA3(str, password);
CryptoJS.HmacSHA224(str, password);
CryptoJS.HmacSHA256(str, password);
CryptoJS.HmacSHA384(str, password);
CryptoJS.HmacSHA512(str, password);
使用 Crypto-JS 进行加密、解密

→ 这里特别注意的是:Crypto-JS 相关 encrypt 函数会并不直接返回字符串,需要调用返回对象的 toString 方法,或者通过 Crypto-JS 转码才能得到真实的结果

① AES

﹟简介:
高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥,具体的加密流程如下图:
在这里插入图片描述
具体介绍可以看一下这篇文章: https://blog.csdn.net/qq_28205153/article/details/55798628

﹟引入 aes.js

import CryptoJS from "crypto-js/aes";

<script src="cryptojs/rollups/aes.js"></script>

﹟调用 CryptoJS.AES

// 官方示例, 每次输出的密文都不一样
CryptoJS.AES.encrypt("Message", "Secret Passphrase");
 
// 正确用法
 
var str = '123456';
// 密钥 16 位
var key = '0123456789abcdef';
// 初始向量 initial vector 16 位
var iv = '0123456789abcdef';
// key 和 iv 可以一致
 
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
 
var encrypted = CryptoJS.AES.encrypt(str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为字符串
encrypted = encrypted.toString();
 
// mode 支持 CBC、CFB、CTR、ECB、OFB, 默认 CBC
// padding 支持 Pkcs7、AnsiX923、Iso10126
// 、NoPadding、ZeroPadding, 默认 Pkcs7, 即 Pkcs5
 
var decrypted = CryptoJS.AES.decrypt(encrypted, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为 utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
 
// 引入其他加密模式, 填充模式需要引入对应的 js 文件
/*
cryptojs/components/mode-cfb-min.js
cryptojs/components/mode-ctr-min.js
cryptojs/components/mode-ecb-min.js
cryptojs/components/mode-ofb-min.js
cryptojs/components/pad-ansix923-min.js
cryptojs/components/pad-iso10126-min.js
cryptojs/components/pad-iso97971-min.js
cryptojs/components/pad-nopadding-min.js
*/

② DES、Triple DES

﹟简介:
DES、Triple DES 的调用形式与 AES 一致

﹟引入 triple.js, DES 和 Triple DES 都定义在 tripledes.js

import CryptoJS from "crypto-js/tripledes";

<script src="cryptojs/rollups/tripledes.js"></script>

﹟调用 CryptoJS.DES, CryptoJS.TripleDES

var str = '123456';
var key = '0123456789abcdef';
var iv = '0123456789abcdef';
 
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
 
// DES 加密
var encrypted = CryptoJS.DES.encrypt(str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为字符串
encrypted = encrypted.toString();
 
// DES 解密
var decrypted = CryptoJS.DES.decrypt(encrypted, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为 utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
 
// Triple DES 加密
var encrypted = CryptoJS.TripleDES.encrypt(str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为字符串
encrypted = encrypted.toString();
 
// Triple DES 解密
var decrypted = CryptoJS.TripleDES.decrypt(encrypted, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
});
 
// 转换为 utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);

③ Rabbit、RC4

﹟简介:
Rabbit、RC4 调用方式一致,不支持 mode、padding。

﹟引入 rabbit.js

import CryptoJS from "crypto-js/rabbit";

<script src="cryptojs/rollups/rabbit.js"></script>

﹟调用 CryptoJS.Rabbit

var str = '123456';
var key = '0123456789abcdef';
var iv = '0123456789abcdef';
 
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
 
var encrypted = CryptoJS.Rabbit.encrypt(str, key, {
    iv: iv
});
 
// 转换为字符串
encrypted = encrypted.toString();
 
var decrypted = CryptoJS.Rabbit.decrypt(encrypted, key, {
    iv: iv
});
 
// 转换为 utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);

﹟引入 rc4.js

import CryptoJS from "crypto-js/rc4";

<script src="cryptojs/rollups/rc4.js"></script>

﹟调用 CryptoJS.RC4

var str = '123456';
var key = '0123456789abcdef';
var iv = '0123456789abcdef';
 
key = CryptoJS.enc.Utf8.parse(key);
iv = CryptoJS.enc.Utf8.parse(iv);
 
var encrypted = CryptoJS.RC4.encrypt(str, key, {
    iv: iv
});
 
// 转换为字符串
encrypted = encrypted.toString();
 
var decrypted = CryptoJS.RC4.decrypt(encrypted, key, {
    iv: iv
});
 
// 转换为 utf8 字符串
decrypted = CryptoJS.enc.Utf8.stringify(decrypted);
结语

@关于加密的方法就搜罗到这里啦,需要看一下使用技巧可以看看这几篇文章,写得不错:
https://blog.csdn.net/WangYangsea/article/details/78736513
https://blog.csdn.net/lsvtogergo/article/details/80804312

@关于加密方法的搜罗工具可以看看这个:
https://docs.microsoft.com/zh-cn/dotnet/api/?view=netframework-4.8

@关于加密的在线工具开头有,这里再列举出来总的:
https://blog.zhengxianjun.com/online-tool/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【安全与协议】使用crypto.js进行加密详解 的相关文章

  • 创建Gravatar头像

    Gravatar Globally Recognized Avatar的缩写 是一项用于提供在全球范围内使用的头像服务 只要你在Gravatar的服务器上上传了你自己的头像 你便可以在其他任何支持Gravatar的博客 论坛等地方使用它 它
  • 可加密解密的MD5算法

    public class MD5andKL MD5加码 32位 public static String MD5 String inStr MessageDigest md5 null try md5 MessageDigest getIn
  • 利用security.js实现RSA加密

    在项目中遇到要对用户输入的密码进行RSA加密的需求 总结一下实现过程 div div
  • Android和java两平台AES的互相加密解密

    import java io UnsupportedEncodingException import java security InvalidKeyException import java security Key import jav
  • Android MD5加密算法

    Android MD5加密算与J2SE平台一模一样 因为Android 平台支持 java security MessageDigest这个包 实际上与J2SE平台一模一样 算法签名 String getMD5 String val thr
  • Java I/O (第二版) I/O基础 I/O概述

    第一部分 第一章 介绍I O 输入和输出 的简写I O 它是任何操作系统和程序设计语言所必须的基础功能 只有空想家才会喜欢没有输入输出的程序 同时 IO的话题似乎对程序员没有什么吸引力 其实不然 我们应该有很多有趣的东西需要学习在IO中 J
  • shell脚本中嵌入二进制文件

    最近有人问我 一个集群监控软件的安装文件特别 诡异 说脚本里有 乱码 却能执行 是怎么回事 我看了才发现这个东西原来是典型的脚本嵌套代码的模式 这里就讲讲吧 反正好久没写东西了 某些比较 拽 的单位在发布Linux软件时以一种特殊的形式发布
  • /etc/目录下的passwd文件内容详解

    etc passwd中一行记录对应着一个用户 每行记录又被冒号 分隔为7个字段 其格式和具体含义如下 用户名 口令 用户标识号 组标识号 注释性描述 主目录 登录Shell 1 用户名 是代表用户账号的字符串 通常长度不超过8个字符 并且由
  • 如何破解PDF文件密码(在线破解PDF密码)

    如何破解PDF文件密码 在线破解PDF密码 fcwgw 5d6d com 整理 凌空飞度社区 每当毕业临近的时候 毕业生都会忙着写论文 每逢此时 Adobe Reader就是最忙的了 但是有时候遇到一些加密的PDF文档 Adobe Read
  • CryptoJS与JSEncrypt 加密算法

    crypto js进行AES加密 安装 npm i save crypto js jsencrypt进行RSA加密 安装 npm i save jsencrypt 官网 https github com travist jsencrypt
  • 自创简易加密算法

    前几日和同事聊天 说到经常忘记密码 但记在一些地方 又不放心 我们就想 要是实现一个加密算法 每次记录加密结果 需要时再解密 那问题不就迎刃而解了嘛 后来根据需求 设计了一个基于异或的对称加密算法 算法非常简单 1 先定义一个由一系列不规则
  • 使用 cryptojs 进行 Java 到 JS 和 JS 到 Java 加密

    几周前我收到了这篇文章并且工作得很好 适用于 Java 和 Javascript 的兼容 AES 算法 现在 我需要执行相反的操作 但是一旦进入java 我就会得到这个异常 javax crypto BadPaddingException
  • CryptoJS AES-128-ECB 和 PHP openssl_encrypt 不匹配

    我有一些 PHP 代码 无法编辑 还有一个充满加密消息的数据库 key 297796CCB81D2553B07B379D78D87618 return encrypted openssl encrypt data AES 128 ECB k
  • 如何使用 JSBN 加密 Crypto-JS 密钥?

    我在用着JSBN http www cs students stanford edu tjw jsbn 使用公钥 私钥对加密 解密数据 它非常适合文本数据 包括十六进制字符串 我的问题是现在我有二进制数据 特别是加密JS https cod
  • 在 AES-CTR 模式下正确使用随机数和计数器

    据我了解 在 AES 计数器模式下 我需要使用 128 位随机数 最简单的方法是使用随机 128 位随机数 但我不确定如果将其作为所有随机位传递 算法是否能够正确增加计数器 我认为正确的方法是使用 96 位随机数和从 0 开始的 32 位计
  • AES 在 CryptoJS 中加密并在 Coldfusion 中解密

    我们有一个用 Coldfusion9 编写的静默登录服务 它接受来自外部系统的加密字符串 然后根据商定的算法 编码设置进行解密 多年来 这在运行 ASP JAVA PHP 的系统上一直没有问题 但我们现在有一个客户别无选择 只能使用 Cry
  • 在 PHP openssl 中加密并在 javascript CryptoJS 中解密

    我正在使用 PHP 加密一些参数 openssl parameter AES 256 ECB client 我想解密CryptoJS CryptoJS AES decrypt parameter client mode CryptoJS m
  • 如何在 JavaScript 中使用 CryptoJS

    I used CryptoJS https github com brix crypto js代替nodejscrypto 模块 因为我只使用原生 JavaScript 但有些代码无法运行 function aesEncrypt text
  • 加密 (cryptojs) - 解密 (erlang)

    我有一个使用 cryptoJS AES 加密的值 需要使用 Erlang 加密库进行解密 对我来说问题在于能够在 Erlang 中使用解密aes cbc 128 decrypt Key IVec Cipher 我想 我需要知道使用的 IVe
  • 如何在java服务器端解密cryptojs AES加密消息?

    我有以下基于 cryptojs 的 javascript 加密 解密函数 它工作得很好 我在使用 cryptpjs 加密消息时使用随机盐 随机 iv 值和特定密码 我在解密加密消息时重复使用相同的盐 iv 和密码来生成密钥 这部分效果很好

随机推荐

  • shell脚本判断变量是否包含某个字符串的几种方法

    方法一 利用grep查找 strA long string strB string result echo strA grep strB if result then echo 包含 else echo 不包含 fi 先打印长字符串 然后在
  • 利用SVG滤镜实现水波倒影效果

    SVG滤镜用来增加对SVG图形的特殊效果 多种滤镜巧妙结合起来可以实现很棒的视觉效果 下面利用svg的feTurbulence滤镜和feDisplacementMap来模拟真实的水波倒影特效 效果如下图 代码并不复杂 首先设置两张图片 di
  • 数据包络分析(DEA)——CCR模型

    写在前面 博主本人大学期间参加数学建模竞赛十多余次 获奖等级均在二等奖以上 为了让更多学生在数学建模这条路上少走弯路 故将数学建模常用数学模型算法汇聚于此专栏 希望能够对要参加数学建模比赛的同学们有所帮助 目录 1 模型原理 1 1 模型介
  • 如何搭建以太坊测试链(附教程)

    在以太坊项目实际开发中 我们必须要有一个测试环境 因为产品环境是需要消耗GAS的 因此我们希望在测试环境测试无误之后再发布到产品环境以太坊链上去 本篇教程讲述如何搭建本地的测试链 1 Testnets 以太坊的测试网络环境被称为Testne
  • LeetCode 125. 验证回文串

    题目链接 https leetcode cn problems valid palindrome 思路如下 双指针 一首一尾 相向扫描 每次将两个指针分别移动到下一个字母字符或数字字符 再判断这两个指针指向的字符是否相同 C 代码如下 cl
  • Vue为数字添加逗号分隔

    1 看代码 我将这个代码作为外部js导出了 如果你没有那么多模块 就直接CTRL cv 这个方法 丢到你的 vue代码 methods中就可以用了 export const numberFilter function value cut 2
  • Java Class Version 研究

    一 要解决的问题 我们在尝鲜 JDK1 5 的时候 相信不少人遇到过 Unsupported major minor version 49 0 错误 当时定会茫然不知所措 因为刚开始那会儿 网上与此相关的中文资料还不多 现在好了 网上一找就
  • Mac平台安卓模拟器:网易MuMu mac中文免费版(支持12系统)

    网易MuMu Mac版是一款可以让Mac用户在电脑上轻松玩手游的安卓模拟器 是迄今为止国内最好最流畅的手游模拟器软件 网易mumu mac版现已支持梦幻西游 大话西游 倩女幽魂等众多经典安卓手机游戏 mumu模拟器mac版为大家提供海量免费
  • Python模块-pandas

    目录 数据读取 数据探索 数据清洗 数据清洗 类型转换 缺失值 重复值 值替换 修改表结构 新增列 删除列 删除行 修改列名 数据分组 数值变量 数据分列 分类变量 设置索引 排序 数据筛选 切片 多表拼接 数据聚合 分组运算 groupb
  • 高数:第一章:函数、极限、连续

    文章目录 一 函数 1 函数的概念 基本初等函数 初等函数 2 函数的性质 函数四性态 1 单调性 2 奇偶性 3 导函数的奇偶性 3 周期性 4 有界性 5 对称性 3 基本不等式 4 开根要带绝对值 二 极限 1 极限的概念 数列极限
  • R语言的基础语法及常用命令

    R其实对于数据分析来说只是工具而已 所以刚开始不需要学习多么深多么细 只需要能够满足当前需求就行 之后的在实践中慢慢学习 毕竟想要把R学精并不是容易的事情 正确的做法就是边做边学 不会就google翻文档 本片主要是R的基础语法及常用的命令
  • 关系运算和逻辑运算( &与&& 和

    关系运算和逻辑运算 关系运算 比较 gt gt lt lt 对象 instanceof 类 1 区分 和 区别 赋值符号 将 后面的结果 值 引用 存入 左边的变量空间内 比较符号 比较 后面的元素 值 引用 与前面的是否一致 2 比较运算
  • 外部组件发生异常怎么解决_火绒提示安全服务异常是怎么回事?三种方法帮你轻松解决此问题...

    平时我们在使用电脑的过程当中 为了保护电脑的安全 我们往往会在电脑上安装防护类的软件 比如火绒安全软件 它是一款集杀防于一体的电脑防御及杀毒类安全软件 使用这款软件来保护电脑 不仅软件的体积小巧 占用资源小 而且它的功能强大 可以对我们的电
  • 如何向这个public static void main(String[] args)中的args数组传递参数呢

    如何向这个public static void main String args 中的args数组传递参数呢 重新认识 main 方法 要向 public static void main String args 中的 args 数组传递参
  • Jquery中each的三种遍历方法

    1 选择器 遍历 div each function i i就是索引值 this 表示获取遍历每一个dom对象 2 选择器 遍历 div each function index domEle index就是索引值 domEle 表示获取遍历
  • python 蓝桥 数列排序

    题目 数列排序 问题描述 给定一个长度为n的数列 将这个数列按从小到大的顺序排列 1 lt n lt 200 原因分析 输出格式 输出一行 按从小到大的顺序输出排序后的数列 样例输入 5 8 3 6 4 9 样例输出 3 4 6 8 9 解
  • LittleFOC工程简记——基于定点数的电流PI控制器设计

    LittleFOC工程简记 基于定点数的电流PI控制器设计 这里罗列了系列文章链接 文章目录 LittleFOC工程简记 基于定点数的电流PI控制器设计 前言 电机系统 工程分析 工程代码 前言 在FOC程序在设计的过程中 对于很多芯片而言
  • 地面分割--Patchwork

    文章目录 1问题定义 2同心区域模型 3按照区域划分的平面拟合 4地面点似然估计 GLE 总结 patchwork是一种比较优秀的地面分割方法 其过程主要分为三个部分 同心圆环区域 CZM concentric Zone Model 按照区
  • Qt connect 第五个参数

    一 Qt connect 函数原型如下 第五个 5种 参数根据接收者和发送者是否在同一个线程不同 QObject connect const QObject sender const char signal const QObject re
  • 【安全与协议】使用crypto.js进行加密详解

    JavaScript Crypto JS 前言与工具 前言 使用 Crypto JS 可以非常方便地在 JavaScript 进行 MD5 SHA1 SHA2 SHA3 RIPEMD 160 哈希散列 进行 AES DES Rabbit R