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 相关文章推荐
JavaScript中Math对象方法使用概述
Jan 02 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
jquery中checkbox全选失效的解决方法
Dec 26 Javascript
对于jQuery性能的一些优化建议
Aug 13 Javascript
js实现简单的网页换肤效果
Jan 18 Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 Javascript
JS获取填报扩展单元格控件的值的解决办法
Jul 14 Javascript
详解webpack中的hash、chunkhash、contenthash区别
Jan 05 Javascript
关于vue中 $emit的用法详解
Apr 12 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
May 05 Javascript
关于ES6尾调用优化的使用
Sep 11 Javascript
如何用threejs实现实时多边形折射
May 07 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
ThinkPHP模版引擎之变量输出详解
2014/12/05 PHP
PHP创建PowerPoint2007文档的方法
2015/12/10 PHP
ThinkPHP框架下微信支付功能总结踩坑笔记
2019/04/10 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
JavaScript中判断两个字符串是否相等的方法
2015/07/07 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
用js动态添加html元素,以及属性的简单实例
2016/07/19 Javascript
ajax的分页查询示例(不刷新页面)
2017/01/11 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python版本的读写锁操作方法
2016/04/25 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
css3 transform导致子元素固定定位变成绝对定位的方法
2020/03/06 HTML / CSS
HTML5 Canvas概述
2009/08/26 HTML / CSS
学习委员自我鉴定
2014/01/13 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
党的群众路线教育实践活动督导组工作情况汇报
2014/10/28 职场文书
护理医院见习报告
2014/11/03 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
公司租车协议书
2015/01/29 职场文书
高效笔记技巧分享:学会这些让你不再困扰
2019/09/04 职场文书
golang 实现并发求和
2021/05/08 Golang
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript