深入浅析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 相关文章推荐
基于jquery的无刷新分页技术
Jun 11 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
Jul 31 Javascript
js+div实现图片滚动效果代码
Feb 10 Javascript
javaScript如何处理从java后台返回的list
Apr 24 Javascript
javascript截取字符串小结
Apr 28 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
javascript正则表达式总结
Feb 29 Javascript
AngularJs基本特性解析(一)
Jul 21 Javascript
关于Vue.js 2.0的Vuex 2.0 你需要更新的知识库
Nov 30 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 Javascript
vue中使用vue-cli接入融云实现即时通信
Apr 19 Javascript
微信小程序实现时间进度条功能
Nov 17 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中的MVC模式运用技巧
2007/05/03 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
js表格分页实现代码
2009/09/18 Javascript
jquery里的正则表达式说明
2011/08/03 Javascript
js获得页面的高度和宽度的方法
2014/02/23 Javascript
javascript实现密码验证
2015/11/10 Javascript
jquery实现加载进度条提示效果
2015/11/23 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
2015/12/04 Javascript
node.js+express制作网页计算器
2016/01/17 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
作为老司机使用 React 总结的 11 个经验教训
2017/04/08 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
jQuery实现获取及设置CSS样式操作详解
2018/09/05 jQuery
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
[06:38]DOTA2怒掀电竞风暴 2013Chinajoy
2013/07/27 DOTA
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
pyhanlp安装介绍和简单应用
2019/02/22 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
python实现图片转字符画的完整代码
2021/02/21 Python
澳洲最大的时尚奢侈品电商平台:Cettire
2020/06/15 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
工商管理本科毕业生求职信范文
2013/10/05 职场文书
2014年机关党委工作总结
2014/12/11 职场文书
新年祝酒词大全
2015/08/11 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS