crypto-js 前端DES加密/解密、生成秘钥 详解

2023-10-31

DES概述

DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。需要注意的是,在某些文献中,作为算法的DES称为数据加密算法(Data Encryption Algorithm,DEA),已与作为标准的DES区分开来。

DES 这种古老的算法还是作为简单的加密算法在被使用,因为它已经是可以破解的,所以对于安全性有较高要求的应用场景基本还是使用的RSA

vue DES使用crypto-js

vue 加密相关的库使用最多的就是crypto-js
crypto-js 是一个纯 javascript 写的加密算法类库 ,可以非常方便地在 javascript 进行 MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。

官网描述

https://cryptojs.gitbook.io/docs/
在这里插入图片描述
DES这段是讲:
DES是以前用于加密的主要算法,并已作为正式的联邦信息处理标准(FIPS)发布。由于密钥太小,现在认为DES是不安全的。
3DES是对每块应用DES三次,以增加秘钥大小。该算法现在被认为是安全的。
所以用的话标准就直接使用3DES就可以了,基本就认为不会被破解了。

我们可以看到官网直接就把AES和DES(Triple DES)放一起了,因为用法除了把AES和DES这个名称换一下,其他的没有什么区别。

//加密 Message 待加密信息,Secret Passphrase 秘钥
var encrypted = CryptoJS.DES.encrypt("Message", "Secret Passphrase");//解密 encrypted 待解密信息,Secret Passphrase 秘钥
var decrypted = CryptoJS.DES.decrypt(encrypted, "Secret Passphrase");

还有其他的MD5 SHA就不展开了。

客户秘钥和初始向量

在这里插入图片描述

Custom Key 客户秘钥

DES的秘钥对于我们来说就是字母数字或者字符的组合,可以直接约定秘钥或者随机生成就可以了。

可以随机从 A-Z a-z 0-9 符号:!@#$%^&*中取指定数量字符

//随机生成指定位数的key
export function generatekey(num) {
    let library = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*";
    let key = "";
    for (var i = 0; i < num; i++) {
        let randomPoz = Math.floor(Math.random() * library.length);
        key += library.substring(randomPoz, randomPoz + 1);
    }
    return key;
}

但这个key还需要经过转换才可以使用

For the key, when you pass a string, it's treated as a passphrase and used to derive an actual key and IV. 
Or you can pass a WordArray that represents the actual key. 
If you pass the actual key, you must also pass the actual IV.
/* 支持的parse modules
crypto-js/enc-latin1
crypto-js/enc-utf8
crypto-js/enc-hex
crypto-js/enc-utf16
crypto-js/enc-base64 */

//具体使用
var key = CryptoJS.enc.Hex.parse("000102030405060708090a0b0c0d0e0f");
var key = cryptoJs.enc.Utf8.parse("123456");
IV 初始向量

块模式和填充方式

Block Modes and Padding
在这里插入图片描述

Block Modes 块模式:
CryptoJS supports the following modes:

CBC (the default) 加密块链模式
CFB 加密反馈模式
CTR
OFB 输出反馈模式
ECB 电子密码本模式

crypto-js/mode-cfb
crypto-js/mode-ctr
crypto-js/mode-ctr-gladman
crypto-js/mode-ofb
crypto-js/mode-ecb

这个具体的有点多,这里就不展开了,可以看一下另外一篇 DES加密模式详解,主要了解一下支持这些方式,每个方式的参数需要调整一下。这块没注意的话错就比较难找了。

Padding 填充方式
CryptoJS supports the following padding schemes:
Pkcs7 (the default)
Iso97971
AnsiX923
Iso10126
ZeroPadding
NoPadding

crypto-js/pad-pkcs7
crypto-js/pad-ansix923
crypto-js/pad-iso10126
crypto-js/pad-iso97971
crypto-js/pad-zeropadding
crypto-js/pad-nopadding

这个具体的也有点多,这里就不展开了

指定块模式和填充方式
var encrypted = CryptoJS.AES.encrypt("Message", "Secret Passphrase", {
  mode: CryptoJS.mode.CFB,
  padding: CryptoJS.pad.AnsiX923
});

第三个参数就提供了我们可以修改块模式和填充方式的地方。

因为js和java中DES的默认参数就不一样,不带块模式和填充方式的话肯定就两边算法不一致了,所以这个参数就需要与后台的保持一致。

封装的方法

添加相关依赖
npm install crypto-js

或者直接在vue ui中搜索添加

DES加密
//DES加密
export function encryptDes(message, key) {
    var keyHex = cryptoJs.enc.Utf8.parse(key)
    /* 这里的模式参数需要和后端匹配 mode.ECB,mode.CBC*/
    var encrypted = cryptoJs.DES.encrypt(message, keyHex, { 
    	mode: cryptoJs.mode.ECB, 
    	padding: cryptoJs.pad.Pkcs7 
    });
    return encrypted.ciphertext.toString();
}
DES解密
//DES解密
export function decryptDes(message, key) {
    var keyHex = cryptoJs.enc.Utf8.parse(key)
    var decrypted = cryptoJs.DES.decrypt(
        {
            ciphertext: cryptoJs.enc.Hex.parse(message)
        },
        keyHex,
        {
            mode: cryptoJs.mode.ECB,
            padding: cryptoJs.pad.Pkcs7
        }
    )
    return decrypted.toString(cryptoJs.enc.Utf8)
}

如果是AES的话就直接把D都改成A就可以了

方法使用

引入封装好的方法

import { generatekey, encryptDes, decryptDes } from '@/utils/crypt/des'
var key = generatekey(8);
// DES敏感字段加密
req.data.password = encryptDes(req.data.password, key);
console.log(decryptDes(req.data.password, key))

扩展DES相关

已知破解DES的6种方法

在线算法一致性验证工具

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

crypto-js 前端DES加密/解密、生成秘钥 详解 的相关文章

  • 从谷歌宕机事件认识互联网工作原理

    摘要 谷歌服务器经历了短暂的宕机事件 持续大概27分钟 对部分地区的互联网用户造成了影响 此次事件的原因深究起来需要进入互联网络那深邃的 黑暗的角落 译者注 本文中提到CloudFlare是一家总部位于美国旧金山的内容分发网络 CDN 服务

随机推荐

  • 必备歌曲--超经典

    一些超经典的歌曲 看看你听过多少 1 陈慧琳 记事本 爱得痛了 痛的哭了 记载着我们过去的点点滴滴 让我们一起回忆 2 王力宏 唯一 悠扬 流畅 很有韵味的感觉 大声对你深爱的人说你是我的唯一王力宏新专辑首支主打歌 唯一 打动不少歌迷 觉得
  • 华为OD机试 - 跳房子I(Java)

    题目描述 跳房子 也叫跳飞机 是一种世界性的儿童游戏 游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格 跳房子的过程中 可以向前跳 也可以向后跳 假设房子的总格数是count 小红每回合可能连续跳的步教都放在数组steps中 请问
  • shell 脚本中wait命令以及多进程库wait()原语的使用

    一 脚本源码 compute it 1 gt compute it 1 out compute it 2 gt compute it 2 out wait cat compute it 1 out cat compute it 2 out
  • 解决Spyder无法自动补全某些代码的问题

    今天在Spyder发现按tab代码无法自动补全 网上的方法全部试过了 如在ipython里面勾选greedy completion 和autocall选full 删除enum34 我根本就没有这个包 安装rope 安装正确版本的jedi和p
  • JAVA this关键字的使用(JacKing)

    1 对当前对象的引用 public class Leaf int i 0 Leaf increment i return this void print System out println i i public static void m
  • Unity3d trial version 水印

    使用个人免费版发布安卓手机版包 屏幕右下角显示 trial version 水印 解决办法 1 免费版Unity Hub 使用国外网络刷新证书 2 使用付费版Unity Hub
  • 美团笔试-回转寿司

    小美请小团吃回转寿司 转盘上有N盘寿司围成一圈 第1盘与第2盘相邻 第2盘与第3盘相邻 第N 1盘与第N盘相邻 第N盘与第1盘相邻 小团认为第i盘寿司的美味值为A i 可能是负值 如果小团讨厌这盘寿司 现在 小团要在转盘上选出连续的若干盘寿
  • Qt网络编程之实例一GET方式

    看了两天的Qt网络编程 其实主要就是看了看QNetworkAccessManager QNetworkRequest和QNetworkReply这三个类的主要内容 在之前 Qt网络编程主要是使用QHttp等类 但是现在在帮助手册中这些类已经
  • 2022年2月6日--2月12日(ue智慧城市3,4周,本周10小时,合计1929小时,剩余8071小时)

    目前 ue视频教程进行到了智 慧 城 市 3 11 mysql 7 1 tf1 4 11 蓝图反射 1 9 moba 1 5 webapp 2 4 mmoarpg 00A 04 socket 2 57 Opengl 5 9 GLSL 2 1
  • 汇编ret ,retf ,iret ,int指令详解

    ret指令 执行过程 ret指令用栈中的数据 修改IP的值 从而实现近转移 CPU执行ret指令时 进行下面两步操作 IP SS 16 SP SP SP 2 另一种用法 ret n n为整数 等效于 IP SS 16 SP SP SP 2
  • mysql索引的使用和讲解

    索引概述 索引是一个数据结构 索引是帮助 MySQL 高效获取数据的数据结构 有序 在数据之外 数据库系统还维护着满足特定查找算法的数据结构 这些数据结构以某种方式引用 指向 数据 这样就可以在这些数据结构上实现高级查询算法 这种数据结构就
  • 大数据毕设项目 基于python 爬虫 flask的疫情数据可视化系统

    文章目录 1 课题背景 2 实现效果 2 1 整体界面展示 2 2 31省病例柱形图 2 3 全国现有确诊人数趋势 2 4 中国累计确诊时间线 2 5 中国疫情情况饼状图 2 6 高风险树状图 3 相关理论及技术 3 1爬虫 3 2 Dja
  • 谷粒商城微服务分布式高级篇ElasticSearch五——商城业务-商品上架

    文章目录 商品上架 ES数据模型 上架流程 mybatis之foreach用法 TypeReference Feign调用流程 商品上架 后台管理员对spu审核进行操作 点击上架 只有当商品上架才应该被检索 即需要导入商品数据到ES中 请求
  • 神经网络是算法还是模型,神经网络 图像相似度

    神经网络的准确率是怎么计算的 其实神经网络的准确率的标准是自己定义的 我把你的例子赋予某种意义讲解 1 期望输出 1 0 0 1 每个元素代表一个属性是否存在 像着4个元素分别表示 是否肺炎 是否肝炎 是否肾炎 是否胆炎 1表示是 0表示不
  • 知乎:1.03亿月活用户,获得感战略下的内容质量和商业化布局难平衡

    点击上方蓝字关注我们 分析知乎财报 聊聊以下几点问题 知乎主要靠什么赚钱 知乎的收入来源 知乎在商业化方面做了那些探索 知乎的产品规划 玩过知乎的朋友 一定看到过以下短句 谢邀 人在美国 刚下飞机 圈内熟人太多 利益相关 匿了 在知乎回答中
  • 计算机防火墙不能更改,win7无法更改防火墙设置提示系统报错怎么办

    防火墙也称防护墙 是一种位于内部网络与外部网络之间的网络安全系统 可以防止病毒入侵 有位 Win7系统 用户想更改防火墙某些设置 出现无法更改的情况 系统报错 0x80074200 怎么办呢 下面小编告诉大家两种解决win7无法更改防火墙设
  • Qt实现单击或双击QTableWidge/View表头进行排序

    先看效果图 点击一次对应列进行降序 再点击一次进行升序 分别对应图1 图2 实现代码 构造函数中设置了一个sign以及关联对应的信号 双击表头的信号为sectionDoubleClickClicked m sign true 设置一个标志位
  • cpu中的MMU的作用

    虚拟内存与物理内存之间的映射 用户空间映射到物理内存是独立的 提高安全性 修改内存访问级别 0是最高级
  • 通过python控制GDB进行调试

    最近需要对自己开发RISC V Server调试器进行稳定性测试 所以需要通过使用自动化脚本进行测试 这里想通过Python编写脚本来控制GDB进行稳定性测试 Python中有一个库pygdbmi 代码如下 from pygdbmi gdb
  • crypto-js 前端DES加密/解密、生成秘钥 详解

    DES概述 DES全称为Data Encryption Standard 即数据加密标准 是一种使用密钥加密的块算法 1977年被美国联邦政府的国家标准局确定为联邦资料处理标准 FIPS 并授权在非密级政府通信中使用 随后该算法在国际上广泛