维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
设d为一固定的正整数,d个位移代换表π=(π12,…,πd),由密钥序列K=(k1,k2,…,kd)给定,第 i+td个明文字母由表πi决定。即密钥ki决定
加密算法如下:
ek(xi+td)=(xi+td+ki)mod(q)e_k(x_{i+td})=(x_{i+td}+k_i)mod(q)ek​(xi+td​)=(xi+td​+ki​)mod(q)
解密算法如下:
ek(yi+td)=(yi+td+ki)mod(q)e_k(y_{i+td})=(y_{i+td}+k_i)mod(q)ek​(yi+td​)=(yi+td​+ki​)mod(q)

例:当q=26时,x=polyalphabetic cipher ,K=RADIO

明文 polyalphabeticcipher
密钥 RADIORADIORADIORADIO
密文 GOOGOCPKIPVTLKQZPKMF

java代码如下:

package com.ibianma;/*** 维多利亚多表代替密码*/
public class MultipleTableMima {/*** 加密* @param plaintext 明文* @param secretKey 密钥* @return 密文*/public String encryption(String plaintext,String secretKey){String ciphertext = "";char[][] chars = new char[2][plaintext.length()];for (int i = 0; i <plaintext.length() ; i++) {chars[0][i]=plaintext.charAt(i);chars[1][i]=secretKey.toUpperCase().charAt(i%(secretKey.length()));}char[] charArray = plaintext.toCharArray();for (int i = 0; i <charArray.length ; i++) {int j = charArray[i];if (j>=97&&j<=97+26){int k = chars[1][i];char te = (char) (((j - 97) + (k - 65)) % 26+65);ciphertext = ciphertext+te;}if (j>=65&&j<=65+26){int k = chars[1][i];char te = (char) (((j - 65) + (k - 65)) % 26+97);ciphertext = ciphertext+te;}}return  ciphertext;}/*** 解密算法* @param ciphertext 密文* @param secretKey 密钥* @return 明文*/public String decrypt(String ciphertext,String secretKey){String plaintext="";char[][] chars = new char[2][ciphertext.length()];for (int i = 0; i <ciphertext.length() ; i++) {chars[0][i]=ciphertext.charAt(i);chars[1][i]=secretKey.toUpperCase().charAt(i%(secretKey.length()));}char[] charArray = ciphertext.toCharArray();for (int i = 0; i <charArray.length ; i++) {int j = charArray[i];if (j>=97&&j<=97+26){int k = chars[1][i];char te = (char) (((j - 97) + 26-(k - 65)) % 26+65);plaintext = plaintext+te;}if (j>=65&&j<=65+26){int k = chars[1][i];char te = (char) (((j - 65) + 26-(k - 65)) % 26+97);plaintext = plaintext+te;}}return plaintext;}
}

测试代码如下:

package com.ibianma;import java.util.Scanner;public class CodingTest {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("请输入密匙:");String s = scanner.next();MultipleTableMima mima = new MultipleTableMima();System.out.print("请输入明文:");String mingWen = scanner.next();String sl = mima.encryption(mingWen, s);System.out.println("加密后的密文是:"+sl);String s2 = mima.decrypt(sl,s);System.out.println("解密后的明文是:"+s2);}
}

测试结果如下:

请输入密匙:dfvGVV
请输入明文:dscfbgGHJBVF
加密后的密文是:GXXLWBjmehqa
解密后的明文是:dscfbgGHJBVF

java实现多表代替密码(维吉尼亚密码)相关推荐

  1. 多表代换和维吉尼亚密码

    一.多表代换 多表代换密码跟单表代换密码的区别,主要是,多表代换的代换表有多个.对于加密,交替使用不同的代换表.注意,加密和解密要同步,也就是,加密和解密所用的代换表顺序要一致,不然,解密会出错. 多 ...

  2. 古典密码(单表密码,维吉尼亚密码,普莱费尔密码,一次一密)

    古典密码 1.单表密码(仿射加密) 仿射加密变化是:y=ax+b 算法: 仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母. A B C ...

  3. Java实现凯撒密码、维吉尼亚密码、双换位密码、RC4算法加密

    文章目录 前言 一.凯撒密码 二.维吉尼亚密码 三.双换位密码 四.RC4算法加密 前言 本博文为信息安全与支付课程的课程作业. 一.凯撒密码 文件有:Caesar.java.输入文件input1.t ...

  4. 维吉尼亚密码-攻防世界(shanghai)

    ⭐维吉尼亚密码 维吉尼亚密码 是使用一系列 凯撒密码 组成密码字母表的加密算法,属于多表密码的一种简单形式. 加密原理 维吉尼亚密码的前身,是我们熟悉的凯撒密码. 凯撒密码的加密方式是依靠一张字母表中 ...

  5. Android实现信息安全中维吉尼亚密码技术

    人们在单一恺撒密码的基础上扩展出多表密码,称为"维吉尼亚"密码.是法国密码学家维吉尼亚在1586年提出的一种多表替代密码,维吉尼亚密码引入了"密钥"的概念,即根 ...

  6. 维吉尼亚密码及其破解

    凯撒密码 凯撒密码是一种简单的加密方法,即将文本中的每一个字符都位移相同的位置. 如选定位移3位: 原文:a b c 密文:d e f 由于出现了字母频度分析,凯撒密码变得很容易破解. "如 ...

  7. 如何计算维吉尼亚密码?Java实现维吉尼亚密码的加密解密算法

    文章目录 如何计算维吉尼亚密码? Java实现加密算法 Java实现解密算法 参考博客 如何计算维吉尼亚密码? 计算维吉尼亚密码有2种方式,一种是根据密码表查找,另一种是手动计算方法. 1.密码表查找 ...

  8. MTALAB实现多表代替密码(维吉尼亚密码)

    维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式. 设d为一固定的正整数,d个位移代换表π=(π1,π2,-,πd),由密钥序列K=(k1,k2 ...

  9. 维吉尼亚密码Java实现

    维吉尼亚密码是一种古典密码,属于代换密码,而且是多表代换密码. 密文对应的字母数字=明文对应的字母数字+密钥对应的字母数字 例如: 明文abcde,密钥abcd,对应的密文就是bdfhf,第五个明文e ...

  10. 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现

    维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...

最新文章

  1. win 7 系统过期处理办法
  2. java获取当前方法
  3. 关于印发《会计电算化管理办法》等规章的通知
  4. 关于Oracle中varchar2和dbms_output.put_line的长度限制问题小结
  5. 【进程的同步和互斥,看懂这张图就够了!】
  6. 【目标检测_CentripetalNet】CentripetalNet: Pursuing High-quality Keypoint Pairs for Object Detection_2020
  7. Flask 第三方组件之 login
  8. 行!看到抖音上Python程序员晒得工资条,我沉默了......
  9. python导入同一文件夹下的类_python自定义模块
  10. PowerDesigner oracle 反向工程到cdm文件
  11. opengl 实时波形显示_OpenGL1------OpenGL概述
  12. python中类的参数怎么传_如何将整个类作为参数传递给另一个类的方法
  13. Vivado Launching SDK Importing Hardware Specification error的解决方法
  14. 中国无线耳机行业市场供需与战略研究报告
  15. Python解析器安装后测试打开微软商店
  16. 2021年系统集成项目管理工程师证书领取
  17. Python3 将汉语转换为汉语拼音
  18. 批量下载NCBI各种数据的方法集合
  19. unity3d Daikon GUI 图片查看器 Demo 说明
  20. FZOJβ #113 后缀平衡树

热门文章

  1. 本地快速搭建FTP服务器
  2. CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
  3. 清明上河图30亿像素_清明上河图高清下载|
  4. linux下如何实现pgadmin备份,linux下pgAdmin4安装
  5. 原型工具MockingBot 墨刀
  6. ORACLE建表sql
  7. fdfs文件服务环境搭建详细教程
  8. unity3d游戏开发第2版 pdf_从零开始学基于ARKit的Unity3d游戏开发系列1
  9. linux和windows php pdf转图片,扩展安装imagick和ImageMagick
  10. linux 内网文件传输工具_局域网内文件传输工具 | nitroshare