JS维吉尼亚密码算法实现代码


Posted in Javascript onNovember 09, 2010
var Vigenere = { 
_strCpr: 'abcdefghijklmnopqrstuvwxyz_12345 67890.ABCDEFGHIJKLMNOPQRSTUVWXYZ',//可以将此字符串的顺序打乱点,或者添加更多字符 
_strKey: function(strK,str){//生成密钥字符串,strK为密钥,str为明文或者密文 
var lenStrK = strK.length; 
var lenStr = str.length; 
if(lenStrK != lenStr){//如果密钥长度与str不同,则需要生成密钥字符串 
if(lenStrK < lenStr){//如果密钥长度比str短,则以不断重复密钥的方式生成密钥字符串 
while(lenStrK < lenStr){ 
strK = strK + strK; 
lenStrK = 2 * lenStrK; 
} 
}//此时,密钥字符串的长度大于或等于str长度 
strK = strK.substring(0,lenStr);//将密钥字符串截取为与str等长的字符串 
} 
return strK; 
} 
} Vigenere.lenCpr = Vigenere._strCpr.length; 
Vigenere.Encrypt = function(K,P){//加密算法,K为密钥,P为明文 
K = Vigenere._strKey(K,P); 
var lenK = K.length; 
var rlt = ''; 
var loop = 0; 
for(loop=0; loop<lenK; loop++){ 
var iP = Vigenere._strCpr.indexOf(P.charAt(loop)); 
if(iP==-1) return '本算法暂时不能对字符:' + P.charAt(loop) + '进行加密'; 
var iK = Vigenere._strCpr.indexOf(K.charAt(loop)); 
if(iK==-1) return '密钥中包含非法字符:' + K.charAt(loop); 
var i = (iP + iK) % Vigenere.lenCpr; 
rlt = rlt + Vigenere._strCpr.charAt(i); 
} 
return rlt; 
}; 
Vigenere.DisEncrypt = function(K,C){ 
K = Vigenere._strKey(K,C); 
var lenK = K.length; 
var rlt = ''; 
var loop = 0; 
for(loop=0; loop<lenK; loop++){ 
var iK = Vigenere._strCpr.indexOf(K.charAt(loop)); 
if(iK==-1) return '密钥中包含非法字符:' + K.charAt(loop); 
var iC = Vigenere._strCpr.indexOf(C.charAt(loop)); 
if(iK > iC){ 
rlt += Vigenere._strCpr.charAt(iC + Vigenere.lenCpr - iK); 
} 
else{ 
rlt += Vigenere._strCpr.charAt(iC - iK); 
} 
} 
return rlt; 
};
Javascript 相关文章推荐
网页中实现浏览器的最大,最小化和关闭按钮
Mar 12 Javascript
js获取url参数的使用扩展实例
Dec 29 Javascript
IE6下opacity与JQuery的奇妙结合
Mar 01 Javascript
引用外部脚本时script标签关闭的写法
Jan 20 Javascript
js toFixed()方法的重写实现精度的统一
Mar 06 Javascript
JS实现弹出浮动窗口(支持鼠标拖动和关闭)实例详解
Aug 06 Javascript
jQuery实现向下滑出的二级菜单效果实例
Aug 22 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
基于vue.js实现图片轮播效果
Dec 01 Javascript
浅谈Vuejs Prop基本用法
Aug 17 Javascript
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
网易JS面试题与Javascript词法作用域说明
Nov 09 #Javascript
浅谈Javascript嵌套函数及闭包
Nov 09 #Javascript
JavaScript高级程序设计 扩展--关于动态原型
Nov 09 #Javascript
关于JavaScript定义类和对象的几种方式
Nov 09 #Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
Nov 09 #Javascript
一个javascript图片阅览组件
Nov 09 #Javascript
js中格式化日期时间型数据函数代码
Nov 08 #Javascript
You might like
第十四节--命名空间
2006/11/16 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
thinkPHP5框架auth权限控制类与用法示例
2018/06/12 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
JavaScript 大数据相加的问题
2011/08/03 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
浅谈angularJS中的事件
2016/07/12 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
js的三种继承方式详解
2017/01/21 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
图解javascript作用域链
2019/05/27 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
vue项目中锚点定位替代方式
2019/11/13 Javascript
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
浅谈Python由__dict__和dir()引发的一些思考
2017/10/30 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
医学生个人求职信范文
2014/02/07 职场文书
群众路线领导对照材料
2014/08/23 职场文书
教师个人事迹材料
2014/12/17 职场文书
开平碉楼导游词
2015/02/06 职场文书
胡桃夹子观后感
2015/06/11 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL