【加密解密】维吉尼亚加密(Javascript实现)
2017-02-08 00:00
162 查看
摘要: 维吉尼亚加密
■维吉尼亚加密(Vigenere cipher )
维吉尼亚加密是使用一系列凯撒加密组成密码字母表的加密算法,属于多表密码的一种简单形式。
维吉尼亚加密以其简单易用而著称,同时初学者通常难以破解,因而又被称为“不可破译的密码”。这也让很多人使用维吉尼亚密码来加密的目的就是为了将其破解。
维吉尼亚密码是由一些偏移量不同的恺撒密码组成。
为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
明文:ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
密钥:LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
密文:LXFOPVEFRNHR
.
■维吉尼亚加密(Vigenere cipher )
维吉尼亚加密是使用一系列凯撒加密组成密码字母表的加密算法,属于多表密码的一种简单形式。
维吉尼亚加密以其简单易用而著称,同时初学者通常难以破解,因而又被称为“不可破译的密码”。这也让很多人使用维吉尼亚密码来加密的目的就是为了将其破解。
维吉尼亚密码是由一些偏移量不同的恺撒密码组成。
为了生成密码,需要使用表格法。这一表格包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。
明文:ATTACKATDAWN
选择某一关键词并重复而得到密钥,如关键词为LEMON时,密钥为:
密钥:LEMONLEMONLE
对于明文的第一个字母A,对应密钥的第一个字母L,于是使用表格中L行字母表进行加密,得到密文第一个字母L。类似地,明文第二个字母为T,在表格中使用对应的E行进行加密,得到密文第二个字母X。以此类推,可以得到:
密文:LXFOPVEFRNHR
维吉尼亚加密. <script language="JavaScript"> // encrypt using Vingere function do_encrypt() { var key = document.cipher.key.value; var plain = document.cipher.plain.value; var ctext = ""; // do the encoding var kpos = 0; for( var i = 0; i < plain.length; i ++ ) { var kcode = key.charCodeAt( kpos % key.length ); var pcode = plain.charCodeAt( i ); var ccode = pcode; if ( pcode >= 65 && pcode <= 90 ) { if (kcode >= 65 && kcode <= 90 ) { ccode = ( ( kcode - 65 ) + ( pcode - 65 ) ) % 26 + 65; } if (kcode >= 97 && kcode <= 122 ) { ccode = ( ( kcode - 97 ) + ( pcode - 65 ) ) % 26 + 65; } kpos ++; } if ( pcode >= 97 && pcode <= 122 ) { if (kcode >= 65 && kcode <= 90 ) { ccode = ( ( kcode - 65 ) + ( pcode - 97 ) ) % 26 + 97; } if (kcode >= 97 && kcode <= 122 ) { ccode = ( ( kcode - 97 ) + ( pcode - 97 ) ) % 26 + 97; } kpos ++; } // console.log(pcode + "," + ccode); ctext += String.fromCharCode(ccode); } document.cipher.enc.value = ctext; } function do_decrypt() { var key = document.cipher.key.value; var ctext = document.cipher.enc.value; var plain = ""; // do the encoding var kpos = 0; for( var i = 0; i < ctext.length; i ++ ) { var kcode = key.charCodeAt( kpos % key.length ); var ccode = ctext.charCodeAt( i ); var pcode = ccode; if ( ccode >= 65 && ccode <= 90 ) { if (kcode >= 65 && kcode <= 90) { pcode = ( ( ccode - 65 ) - ( kcode - 65 ) + 26 ) % 26 + 65; } if (kcode >= 97 && kcode <= 122) { pcode = ( ( ccode - 65 ) - ( kcode - 97 ) + 26 ) % 26 + 65; } kpos ++; } if ( ccode >= 97 && ccode <= 122 ) { if (kcode >= 65 && kcode <= 90) { pcode = ( ( ccode - 97 ) - ( kcode - 65 ) + 26 ) % 26 + 97; } if (kcode >= 97 && kcode <= 122) { pcode = ( ( ccode - 97 ) - ( kcode - 97 ) + 26 ) % 26 + 97; } kpos ++; } // console.log(ccode + "," + pcode); plain += String.fromCharCode(pcode); } document.cipher.plain.value = plain; } </script> <form name="cipher"> <table> <tr><td>密钥:</td><td><input type="text" name="key" value="sampleKey"></td></tr> <tr><td>明文:</td><td><input type="text" name="plain" size=50 value="This is a test."></td></tr> <tr><td>密文:</td><td><input type="text" name="enc" size=50></td></tr> </table> <input type="button" value="加密" onClick="do_encrypt()"> <input type="button" value="解密" onClick="do_decrypt()"> </form>
.
相关文章推荐
- 维吉尼亚(Vigenere)密码算法(Javascript实现加密与解密)
- 维吉尼亚(Vigenere)密码算法(Javascript实现加密与解密)
- 【前端Js】高级加密解密标准AES加密(Javascript代码实现)
- javascript实现的文字加密解密
- 【加密解密】高级加密标准AES加密(Javascript实现)
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现【多种语言AES/CBC/PKCS5Padding通用加解密数据】
- javaScript base64算法的实现 与 java中的base64 加密 解密
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- 【加密解密】单表加密(Javascript实现)
- 加密解密及其javascript实现
- javascript 实现 aes加密解密(可与Java互解)
- javascript实现des解密加密全过程
- Javascript实现base64的加密解密
- JavaScript实现的简单加密解密操作示例
- 【加密解密】恺撒加密(Javascript实现)
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现
- C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现