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

复制代码 代码如下:

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;
};

时间: 2024-09-09 23:03:39

JS维吉尼亚密码算法实现代码_javascript技巧的相关文章

关于维吉尼亚密码问题

问题描述 怎么编写维吉尼亚密码有关密钥的程序代码?求大神解说一下

解密-怎么计算用维吉尼亚加密的密文的分组重合指数?

问题描述 怎么计算用维吉尼亚加密的密文的分组重合指数? 比如这个是经过维吉尼亚加密的密文,长度为31:wplle omkam aicqu ioigy oewrd hjlle o 假如密钥为5,所以把密文分成5列,Na,Nb....Nz为每个字母在文中出现的次数 1 2 3 4 5 w p l l e o m k a m a i c q u i o i g y o e w r d h j l l e o 那么第一列的重合指数是不是把这一列的每一个字母(w,o,a,i,h)在整篇文中出现的次数的平方

js实现的万能flv网页播放器代码_javascript技巧

本文实例讲述了js实现的万能flv网页播放器代码.分享给大家供大家参考,具体如下: <div id="player5"><script type="text/javascript" src="swfobject.js"></script><script type="text/javascript"> var s5 = new SWFObject("FlvPlayer20

用原生JS对AJAX做简单封装的实例代码_javascript技巧

首先,我们需要xhr对象.这对我们来说不难,封装成一个函数. var createAjax = function() { var xhr = null; try { //IE系列浏览器 xhr = new ActiveXObject("microsoft.xmlhttp"); } catch (e1) { try { //非IE浏览器 xhr = new XMLHttpRequest(); } catch (e2) { window.alert("您的浏览器不支持ajax,请

原生js实现class的添加和删除简单代码_javascript技巧

实例代码: function hasClass( elements,cName ){ return !!elements.className.match( new RegExp( "(\\s|^)" + cName + "(\\s|$)") ); }; function addClass( elements,cName ){ if( !hasClass( elements,cName ) ){ elements.className += " "

JS实现光滑展开合拢的菜单效果代码_javascript技巧

本文实例讲述了JS实现光滑展开合拢的菜单效果代码.分享给大家供大家参考.具体如下: 这是一个光滑展开又合拢的JS菜单效果,无jQuery插件,完全JavaScript代码实现,没有过多修饰,有兴趣的美化一下,肯定是款不错的折叠菜单. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-swift-fade-in-out-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD

js获取新浪天气接口的实现代码_javascript技巧

js获取新浪天气接口的实现代码 <!doctype html> <html class="no-js fixed-layout"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>天气</title> </

JS实现仿FLASH效果的竖排导航代码_javascript技巧

本文实例讲述了JS实现仿FLASH效果的竖排导航代码.分享给大家供大家参考.具体如下: 这是一款JS+CSS实现的Flash效果的导航菜单,竖向排列,兼容性好,由JavaScript妙味课堂的朋友编写,欢迎测试. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-flash-style-v-nav-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transition

js纯数字逐一停止显示效果的实现代码_javascript技巧

js纯数字逐一停止显示效果的实现代码 function showScore($ele, num, secand, pause){ //second 按照秒数,动画运行多少秒 if (!secand) { secand = 2;} if (!pause) { pause = 20;} var len = String(num).length; var temnum, times = 0 , stepTimes, max ; var numArr = String(num).split(""