Virginia的Javascript实现的一个例子(维吉尼亚)加密算法

传统的加密技术不能在今天的网络安全起到了很大的作用,但每一本关于密码学的开始首先介绍他们,因为他们是密码学的基础和密码学的历史。在维吉尼亚密码章几乎每个密码的书都会有这样的维吉尼亚替换表解释Vigenere密码机制:



加密过程非常简单,给定的密钥字母x和明文字母y,密文字母是x行和y列中的字母。这就决定加密消息需要一个与消息一样长的密钥字符串,通常密钥字符串是关键字的重复。
例如密码学和网络安全——原则和实践中的例子,例如,关键字是欺骗性的,消息是我们自己发现的,然后加密过程如下:

复制代码代码如下所示:
deceptivedeceptivedeceptive(钥匙串)
Wearediscoveredsaveyourself(消息)
zicvtwqngrzgvtwavzhcqyglmgj(密文)


密码中的第一个字母是怎么来的从维吉尼亚替换表,在钥匙串的D线,和消息中的W是Z.

使用查找表来加密几次可以总结规律:要有~ Z 0 ~ 25,然后加密过程是发现在替换表的第一行的字母,如W,然后将D(3倍),以及由此产生的信是密文。如果你计算的底部,然后从下一班(一),也就是说,一个~ Z可以被视为一个环。加密过程是在找到字母后将指针定位到环的特定方向,而数字是由密钥字母表示的数字。这实际上是一个模型26的过程。
此外,上述加密只能对26个字母进行加密,而不能分为案例和案例。但在英语中,除了文字,还有标点符号和空间。如果大多数英文字符的考虑,的维吉尼亚替换表会更大一点浪费空间。如果我们假设可以加密字符n,如果n个字符建立成一个圈,然后加密过程是模块的N,这是过程,C(我)=(K(我)+ P(I))现代,其中K、国防和+ P代表密钥空间、密文空间和信息空间分别。
网络上有人用C实现这种加密算法,几乎全部使用查表法,虽然程序可以生成替换表,但生成的替换表过于规则,现在我用javascript实现了一种使用模块的方法。我觉得更灵活,占用的空间更少。

复制代码代码如下所示:
维吉尼亚= { { var
_strcpr:'abcdefghijklmnopqrstuvwxyz_12345 67890。有',可能这串序列,或添加更多的字符
_strkey:功能(斯塔克,STR){ / /生成密钥字符串,斯塔克的关键,明文或密文序列
无功lenstrk = strk.length;
无功lenstr = str.length;
如果(lenstrk!= lenstr){ / /如果密钥长度不同,STR,它必须生成密钥字符串
如果(lenstrk < lenstr){ / /如果密钥长度短于STR,重复密钥生成密钥字符串
而(lenstrk < lenstr){
斯塔克=斯塔克+斯塔克;
lenstrk = 2 * lenstrk;
}
在这个时候,字符串长度大于或等于字符串长度。
斯塔克= strk.substring(0,lenstr); / /字符串截取和STR长度的关键
}
返回斯塔克;
}
}

vigenere.lencpr =维吉尼亚。_strcpr.length;

维吉尼亚。加密=函数(k,p){ / /加密算法,K键,P表示
K =维吉尼亚。_strkey(K,P);
VaR Lenk = k.length;
VaR RLT =;
var循环= 0;
对于(环= 0;环< Lenk;环+ +){
VaR的IP =维吉尼亚。_strcpr.indexof(p.charat(环));
如果(IP = = 1)返回此算法暂时不能加密字符:' + p.charat(环)+;
VaR IK =维吉尼亚。_strcpr.indexof(k.charat(环));
如果(我= = 1)返回键包含非法字符:' + k.charat(环);
var i =(IP + IK)% vigenere.lencpr;
RLT = RLT +维吉尼亚。_strcpr.charat(我);
}
返回该;
};

vigenere.disencrypt =函数(k,c){
K =维吉尼亚。_strkey(k,C);
VaR Lenk = k.length;
VaR RLT =;
var循环= 0;
对于(环= 0;环< Lenk;环+ +){
VaR IK =维吉尼亚。_strcpr.indexof(k.charat(环));
如果(我= = 1)返回键包含非法字符:' + k.charat(环);
VaR IC =维吉尼亚。_strcpr.indexof(c.charat(环));
如果(ic){
RLT =维吉尼亚。_strcpr.charat(IC + vigenere.lencpr - IK);
}
别的{
RLT =维吉尼亚。_strcpr.charat(IC IK);
}
}
返回该;
};