深入浅析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 各种浏览器下获得日期区别
Dec 22 Javascript
js取模(求余数)隔行变色
May 15 Javascript
EasyUI Pagination 分页的两种做法小结
Jul 09 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
Jul 28 Javascript
require、backbone等重构手机图片查看器
Nov 17 Javascript
详解jQuery lazyload 懒加载
Dec 19 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
webpack组织模块打包Library的原理及实现
Mar 10 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 Javascript
三种方式清除vue路由跳转router-link的历史记录
Apr 10 Vue.js
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
PHP6 先修班 JSON实例代码
2008/08/23 PHP
PHP 文件上传功能实现代码
2009/06/24 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
php验证码实现代码(3种)
2015/09/07 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
flash 得到自身url参数的代码
2009/11/15 Javascript
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
react-native fetch的具体使用方法
2017/11/01 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
JSONP原理及应用实例详解
2018/09/13 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
Vue-CLI与Vuex使用方法实例分析
2020/01/06 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
python回调函数用法实例分析
2015/05/09 Python
python计算文本文件行数的方法
2015/07/06 Python
Python编码类型转换方法详解
2016/07/01 Python
python实现简单tftp(基于udp协议)
2018/07/30 Python
详解Python3中的迭代器和生成器及其区别
2018/10/09 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
Python unittest discover批量执行代码实例
2020/09/08 Python
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
高中生操行评语
2014/04/25 职场文书
会计学专业求职信
2014/07/17 职场文书
承诺书模板
2014/08/30 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
甲午大海战观后感
2015/06/02 职场文书
开业庆典致辞
2015/08/01 职场文书