深入浅析JavaScript中的3DES


Posted in Javascript onAugust 24, 2016

3DES简介:

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

今天需要在客户端实现des 很快就找到了 http://www.tero.co.uk/des/code.php

应用示例

var key = "this is a 24 byte key !!";
var message = "This is a test message";
var ciphertext = des (key, message, 1, 0);
document.writeln ("DES Test: " + stringToHex (ciphertext));

当然发现这不是我们所需要的。我们服务端使用的是des-ede,java中好象叫triple des

这儿有个小坑 des方法本身支持3des

//how many iterations (1 for des, 3 for triple des)
var iterations = key.length > 8 ? 3 : 1; //changed by Paul 16/6/2007 to use Triple DES for 9+ byte keys

但是对于key的使用有个小小的错误

如果是64位是des 正解,但是3des有可能是128位或192位

3des的过程是 en(k3, de(k2, en(k1, P)))

其中k1=k3的时候可以使用简化的128位密钥。

key="k1k1k1k1k2k2k2k2k2" 其实与 k1k1k1k1k2k2k2k2k1k1k1k1应该是等价的。作者没有实现

另外一个就是padding模式,简单的说就是块加密的时候,不足的空位应该怎么补起来 下面是源码

if (padding == 2) message += " "; //pad the message with spaces
else if (padding == 1) {temp = 8-(len%8); message += String.fromCharCode (temp,temp,temp,temp,temp,temp,temp,temp); if (temp==8) len+=8;} //PKCS7 padding
else if (!padding) message += "\0\0\0\0\0\0\0\0"; //pad the message out with null bytes

现在一般使用的是PKCS5/7

调用的注意一下这两点,其实des-ede也就实现了

示例

var key ="b964b7c58e99b59"+"b964b7c5";
var message = "This is a test message";
var ciphertext = des(key, message, 1, 0,0,1);
document.writeln("<br/>DES3 Test: " + stringToHex (ciphertext));

以上所述是小编给大家介绍的JavaScript中的3DES,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
用javascript自动显示最后更新时间
Mar 15 Javascript
aspx中利用js实现确认删除代码
Jul 22 Javascript
javascript 中String.match()与RegExp.exec()的区别说明
Jan 10 Javascript
node.js中的emitter.on方法使用说明
Dec 10 Javascript
jquery解决客户端跨域访问问题
Jan 06 Javascript
jQuery中children()方法用法实例
Jan 07 Javascript
Underscore之Array_动力节点Java学院整理
Jul 10 Javascript
vue通过watch对input做字数限定的方法
Jul 13 Javascript
JS函数节流和函数防抖问题分析
Dec 18 Javascript
vue自定义指令之面板拖拽的实现
Apr 14 Javascript
easyUI 实现的后台分页与前台显示功能示例
Jun 01 Javascript
vue用elementui写form表单时,在label里添加空格操作
Aug 13 Javascript
jQuery自适应轮播图插件Swiper用法示例
Aug 24 #Javascript
JavaScript lodash常见用法系列小结
Aug 24 #Javascript
EasyUI的doCellTip实现鼠标放到单元格上提示单元格内容
Aug 24 #Javascript
JS实现获取当前URL和来源URL的方法
Aug 24 #Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
Aug 24 #Javascript
总结Javascript中的隐式类型转换
Aug 24 #Javascript
jQuery实现的自适应焦点图效果完整实例
Aug 24 #Javascript
You might like
深入PHP异步执行的详解
2013/06/03 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
PHP并发场景的三种解决方案代码实例
2021/02/27 PHP
简明json介绍
2008/09/28 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
JQuery.validationEngine表单验证插件(推荐)
2016/12/10 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
详解elementUI中input框无法输入的问题
2020/04/27 Javascript
js实现无缝轮播图插件封装
2020/07/31 Javascript
[01:10:03]OG vs EG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
Pytorch 使用不同版本的cuda的方法步骤
2020/04/02 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
如何使用Python调整图像大小
2020/09/26 Python
Python3读写ini配置文件的示例
2020/11/06 Python
HTML4和HTML5之间除了相似以外的10个主要不同
2012/12/13 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
I.T中国官网:精选时尚设计师单品网购平台
2018/03/26 全球购物
数字化校园建设方案
2014/05/03 职场文书
人力资源职位说明书
2014/07/29 职场文书
乡镇党建工作汇报材料
2014/08/14 职场文书
党员群众路线对照检查材料思想汇报
2014/09/17 职场文书
购房委托书范本
2014/09/18 职场文书
2015年发展党员工作总结报告
2015/03/31 职场文书
永不妥协观后感
2015/06/10 职场文书
2016年春季开学典礼新闻稿
2015/11/25 职场文书
python缺失值填充方法示例代码
2022/12/24 Python