维吉尼亚密码(Vigenere Cipher)

转载请著明出处

无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字。我们称这种为单表代换密码,而本篇讲的是一种多表代换密码。

定义

设m是一个正整数,定义P=C=K=(Z26)m,对任意的秘钥K=(k1,k2,k3…km)定义
Ek(x1,x2,x3…xm)=(x1+k1,x3+k2…xm+km)和Dk(y1,y2…yk)=(y1-k1,y2-k2…ym-km)

以上所有的运算都是在Z26上进行。

对应于之前的字母表,则每个密钥K相当于一个长度为m的字符串,称为密钥字。维吉尼亚密码一次加密m个名文字母。

维吉尼亚密码的密钥空间大小为26m,所以即使m的值很小,使用穷尽密钥也需要很长的时间。一般来说,多表代换密码比单表代换密码更为安全一些。

举个栗子

假设m=6,密钥字为CIPHER,其对应于如下的数字串(2,8,15,7,4,17),要加密的明文为:encode and decode,秘钥为mykey

代码实现

package com.slp.cryptography;/*** @ClassName VigenereCipher* @Description 维吉尼亚密码* @Author sanglp* @Date 2020/11/30 15:55* @Version 1.0**/
public class VigenereCipher {static int [] arr = {12,24,10,4,24};public static void main(String[] args) {encrypt("encodeanddecode");decrypt("QLMSBQYXHBQAYHC");}/*** 加密函数* @param resource*/public static void encrypt(String resource){char [] souarr = resource.toUpperCase().toCharArray();int len = arr.length;//密钥串的长度StringBuilder result = new StringBuilder();for(int i=0;i<souarr.length;i++){int temp =(souarr[i]-'A'+arr[i%len])%26<0?(souarr[i]-'A'+arr[i%len])%26+26:(souarr[i]-'A'+arr[i%len])%26;result.append((char)('A'+temp));}System.out.println(result.toString());}/*** 解密函数* @param resource*/public static void decrypt(String resource){char [] souarr = resource.toUpperCase().toCharArray();int len = arr.length;//密钥串的长度StringBuilder result = new StringBuilder();for(int i=0;i<souarr.length;i++){int temp =(souarr[i]-'A'-arr[i%len])%26<0?(souarr[i]-'A'-arr[i%len])%26+26:(souarr[i]-'A'-arr[i%len])%26;result.append((char)('A'+temp));}System.out.println(result.toString());}
}

【密码学原理与实践】(四)维吉尼亚密码 符java代码实现相关推荐

  1. 【密码学原理与实践】(二)代换密码 符java代码实现

    代换密码(Substitution Cipher) 转载请著明出处 定义 令P=C=Z26,K是由26个数字0,1,-25的所有可能的置换组成,对任意的π∈K,定义eπ(x)=π(x)和dπ(y)=π ...

  2. 【密码学原理与实践】(三)仿射密码 符java代码实现

    仿射密码(Affine Cipher) 转载请著明出处 仿射密码是代换密码的一种特殊情况. 在学习仿射密码之前我们首先需要了解几个定理 定理 同余方程唯一解定理 设a ∈ Zm,对任意的b∈Zm,同余 ...

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

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

  4. 实验吧-密码学-杯酒人生(特殊凯撒--维吉尼亚密码)(凯撒加解密脚本、维吉尼亚密码加解密脚本)...

    题目: 使用古典密码 一喵星人要想喵星发送一段不知道干什么用的密码"BLOCKCIPHERDESIGNPRINCIPLE", 但是它忘记了密钥是什么, 手头(爪头)只有它自己加密过 ...

  5. 维吉尼亚密码 算法 Java实现

    输入一个字符串作为秘钥K,对输入的任意字符串(暂时只考虑英文字符和数字)可以输出维吉尼亚密码算法加密的密文. 假如以上面第一行代表明文字母,左面第一列代表密钥字母,对如下明文加密: TO BE OR ...

  6. 【密码学原理与实践】DES构建子秘钥 符java代码实现

    代码其实比较简单,最主要是的好好看书,好好理解流程. package com.slp.cryptography.des;/*** @ClassName DesSubKey* @Description ...

  7. 【密码学原理与实践】(一)移位密码 附java代码实现

    移位密码(Shift Cipher) 转载请著名出处 密码体制 一个密码体制是满足以下条件的五元组(P,C,K,E,D) P表示所有可能的明文组成的有限集 C表示所有可能的密文组成的有限集 K表示秘钥 ...

  8. 维吉尼亚c语言编码原理,维吉尼亚密码的C语言实现

    维吉尼亚密码的C语言实现 2016春 密码学原理 软件学院 密码学原理作业报告 作业1:古典密码体制的实践与分析 姓名 查志华 院系 软件学院 学号 1133710313 任课教师 刘绍辉 指导教师 ...

  9. 密码学(二):古典密码之维吉尼亚密码的破解

    维吉尼亚密码的破解 一.引言   上一章我们介绍了维吉尼亚密码的原理,是通过移位替换的加密方法进行加密,但是因为概率论的出现这种简单的移位或替换就容易破解了,其原理很简单,英文中字母出现的频率是不一样 ...

最新文章

  1. 通过chrome inspect 来调试手机hybird APP
  2. 怎样用modelsim做后仿真
  3. boost::reverse_copy相关的测试程序
  4. 在 Vue 中正确使用 防抖 和 节流
  5. 77 行代码实现 ABAP ALV 中的双击事件处理试读版
  6. yolov3训练自己的数据_YOLOv4 训练自己的数据集
  7. css布局方式_手把手教你CSS Flex布局「真香」
  8. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇
  9. plone进行 用户和权限管理
  10. lazada发货_Lazada发货用什么物流?费用要多少?
  11. flask Flash消息
  12. mysql大表修改字段_mysql 如何给大表添加字段
  13. MATLAB 产生带宽信号
  14. MySQL的函数-窗口函数
  15. SDK是什么?什么是SDK
  16. ESP8266-Arduino编程实例-LIS3MDL磁场传感器驱动
  17. 如何通过重写hashCode()方法将偏向锁性能提高4倍?
  18. JNI(4) JNI Functions
  19. 时隔一个月今日头条又宕机了 这个技术公司的“月经宕”有点频繁
  20. 2022/9月份济南X家公司面试题汇总(web前端)

热门文章

  1. js调用java线程_100%原生的JavaScript多线程和并行执行库:Hamsters.js
  2. sunpinyin输入法
  3. 算法2.2 已知线性表LA和LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列。
  4. java轮训算法_负载均衡算法WeightedRoundRobin(加权轮询)简介及算法实现
  5. mysql数据库签到记录表_mysql数据库中表记录的玩法
  6. 目标管理的培训要点是什么?
  7. strdup函数的用法
  8. PageHelper 分页插件
  9. 今日科技联播: 马斯克Twitter一句话,骂掉特斯拉20亿美元市值
  10. 机器学习 第二节 第三课