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编程起步(第二课)
Jan 10 Javascript
判断复选框是否被选中的两种方法
Jun 04 Javascript
探索angularjs+requirejs全面实现按需加载的套路
Feb 26 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
May 10 Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 Javascript
基于Bootstrap的标签页组件及bootstrap-tab使用说明
Jul 25 Javascript
jQuery Dom元素操作技巧
Feb 04 jQuery
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
Jul 22 Javascript
浅谈HTTP 缓存的那些事儿
Oct 17 Javascript
vue单文件组件无法获取$refs的问题
Jun 24 Javascript
解决vue项目获取dom元素宽高总是不准确问题
Jul 29 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
PHP IF ELSE简化/三元一次式的使用
2011/08/22 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
php从给定url获取文件扩展名的方法
2015/03/14 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
DOM相关内容速查手册
2007/02/07 Javascript
js类中的公有变量和私有变量
2008/07/24 Javascript
Mozilla 表达式 __noSuchMethod__
2009/04/05 Javascript
避免回车键导致的页面无意义刷新的解决方法
2011/04/12 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
jquery将一个表单序列化为一个对象的方法
2013/12/02 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
js实现文字在按钮上滚动的方法
2015/08/20 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
2016/09/08 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
vue脚手架中配置Sass的方法
2018/01/04 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
2018/02/05 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
对于Python中RawString的理解介绍
2016/07/07 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python中的global关键字的使用方法
2019/08/20 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
冰淇淋店的创业计划书
2014/02/07 职场文书
中学政教处工作总结
2015/08/13 职场文书
讲解Python实例练习逆序输出字符串
2022/05/06 Python