深入浅析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的的一个隔行变色,鼠标移动变色的小插件
Jul 06 Javascript
JavaScript类库D
Oct 24 Javascript
jQuery模拟新浪微博首页滚动效果的方法
Mar 11 Javascript
jquery点击展示与隐藏更多内容
Dec 03 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
详解jQuery简单的表单应用
Dec 16 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
TypeScript入门-基本数据类型
Mar 28 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 Javascript
js监听html页面的上下滚动事件方法
Sep 11 Javascript
详解javascript中var与ES6规范中let、const区别与用法
Jan 11 Javascript
vue.js+ElementUI实现进度条提示密码强度效果
Jan 18 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 在文件指定行插入数据的代码
2010/05/08 PHP
php代码运行时间查看类代码分享
2011/08/06 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
利用php的ob缓存机制实现页面静态化方法
2017/07/09 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
jquery中this的使用说明
2010/09/06 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
javascript日期比较方法实例分析
2016/06/17 Javascript
微信小程序开发之实现自定义Toast弹框
2017/06/08 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
jQuery Position方法使用和兼容性
2017/08/23 jQuery
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
js实现简单的打印表格
2020/01/15 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
Python 第一步 hello world
2009/09/25 Python
Python常用正则表达式符号浅析
2014/08/13 Python
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python 控制终端输出文字的实例
2019/07/12 Python
解决Python pip 自动更新升级失败的问题
2020/02/21 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
美国最大和最受信任的二手轮胎商店:Bestusedtires.com
2020/06/02 全球购物
自我鉴定怎么写
2013/12/05 职场文书
生物制药自我鉴定
2014/01/25 职场文书
《最大的“书”》教学反思
2014/02/14 职场文书
军训教官感言
2014/03/02 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书