信息安全--维吉利亚密码

说明:

这个可以直接看这个解释:

如果你要对自己的男(女)神用维密(不是维多利亚的秘密)表白,先写好明文:

I LOVE YOU

然后自己设定一个密钥,比如:KISS。
这样密钥与明文对应就是

K ISSK ISS
I LOVE YOU

对第一个字母 “I” 加密过程如下:
先找到最左侧密钥 K 所在的一行和最上方明文 I 所在列,找到他们的相交字母 S ,这样 I 就被加密成了 S 。
同理,这句话通过每一个对应密钥的加密后就变成如下

密钥:KISSKISS
明文:ILOVEYOU
密文:STGNOGGM

【原文链接】:
知乎-维吉利亚密码原理是什么

还有我们老师的 ppt 解释(真心简单):

是一种多表移位替换密码:
设d为一固定的正整数,d个移位替换表π=(π1,π2,…πd)由密钥序列K=(k1,k2,…,kd)给定;
第 i+td 个明文字母由表 πi 决定,即密钥 ki 决定;
ek(xi+td)= (xi+td+ki) mod q =y
dk(yi+td)= (yi+td-ki) mod q =x

java 代码实现:

package com.jiangbiao.firsthomework;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 维吉尼亚密码
 */
public class VigenerePassword {

    public static final char[][] basicTable = new char[26][26];

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        init();
        System.out.println("请输入密钥:");
        String key = input.nextLine();
        System.out.println("请输入明文:");
        String express = input.nextLine();

        String ciphertext = new String();
        ciphertext = encryptionOperation(express, key);
        System.out.println("加密结果如下:" + ciphertext);
    }

    /**
     * 维吉利亚字母表的初始化
     */
    public static void init(){
        System.out.println("维吉尼亚码表如下:");
        for (int i = 0; i < 26; i++){
            for (int j = 0; j < 26; j++){
                basicTable[i][j] = (char)(((j + i) % 26 + 65));//65 = A
                //打印
                System.out.print(basicTable[i][j]);
            }
            System.out.println();
        }
    }

    /**
     * 加密过程
     * @param express
     * @param key
     * @return
     */
    public static String encryptionOperation(String express, String key){
        //对明文进行去除空格,转小写操作  |注:trim()只是去掉首位空格
        String express2 = express.toLowerCase().replaceAll(" ", "");
        System.out.println("express2 : " + express2);
        //若密钥长度小于明文长度,重复密钥
        StringBuffer keys = new StringBuffer("");
        String keyDouble = new String();
        if (key.length() < express2.length()){
           for (int i=0; i<express2.length() / key.length() + express2.length() % key.length(); i++){
               keys = keys.append(key);
           }
           //重复操作处理后的密钥,并进行切分,使长度与明文长度一致
           keyDouble = keys.toString().substring(0, express2.length());
        }
    System.out.println("处理后的密钥:" + keyDouble);
        int i = 0;
        int j = 0;
        char[] keyDoubleChar = keyDouble.toCharArray();
        char[] express2Char = express2.toUpperCase().toCharArray();
        List<Character> ciphertextL = new ArrayList<>();
        for (int m = 0; m < express2.length(); m++){
            for (int n = 0; n < 26; n++){
                if (express2Char[m] == basicTable[0][n]){
                    i = n;
                    System.out.print("  " + "i:" + i + " " + basicTable[0][n]);
                }
                if (keyDoubleChar[m] == basicTable[n][0]){
                    j = n;
                    System.out.print("  " + "j:" + j + " " + basicTable[n][0]);
                }
            }
            System.out.println();
            ciphertextL.add(basicTable[i][j]);
            i = 0;
            j = 0;
        }

        return ciphertextL.toString()
                .substring(1, ciphertextL.toString().length()-1)
                .replaceAll(", ", "");
    }

}
/**
     * 示例1:
     请输入密钥:
     RADIO
     请输入明文:
     p olyal p ha betic cipher
     express2 : polyalphabeticcipher
     处理后的密钥:RADIORADIORADIORADIO
     i:15 P  j:17 R
     j:0 A  i:14 O
     j:3 D  i:11 L
     j:8 I  i:24 Y
     i:0 A  j:14 O
     i:11 L  j:17 R
     j:0 A  i:15 P
     j:3 D  i:7 H
     i:0 A  j:8 I
     i:1 B  j:14 O
     i:4 E  j:17 R
     j:0 A  i:19 T
     j:3 D  i:8 I
     i:2 C  j:8 I
     i:2 C  j:14 O
     i:8 I  j:17 R
     j:0 A  i:15 P
     j:3 D  i:7 H
     i:4 E  j:8 I
     j:14 O  i:17 R
     加密结果如下:GOOGOCPKIPVTLKQZPKMF
     */

    /**
     * 示例2:
     请输入密钥:
     KISS
     请输入明文:
     I LOVE YOU
     express2 : iloveyou
     处理后的密钥:KISSKISS
     i:8 I  j:10 K
     j:8 I  i:11 L
     i:14 O  j:18 S
     j:18 S  i:21 V
     i:4 E  j:10 K
     j:8 I  i:24 Y
     i:14 O  j:18 S
     j:18 S  i:20 U
     加密结果如下:STGNOGGM
     */

原文地址:https://www.cnblogs.com/zishu/p/8650202.html

时间: 2024-10-29 16:38:58

信息安全--维吉利亚密码的相关文章

python编写的维吉尼亚密码加解密程序

维吉尼亚密码表 ============================================= #维吉尼亚密码  加密 key='helloworld' plaintext='whereisthekey' #key='relations' #plaintext='tobeornottobeth' ascii='abcdefghijklmnopqrstuvwxyz' keylen=len(key) ptlen=len(plaintext) ciphertext = '' i = 0 w

维吉尼亚密码的Python实现

代换密码体制的一般定义为M=C=K=Z26,其中M为明文空间.C为密文空间.K为密钥空间.Z26为26个整数(对应26个英文字母)组成的空间:要求26个字母与模26的剩余类集合{0,1,2,-,25}建立一一对应的关系. 1.移位密码 移位密码的加密实现上就是将26个英文字母向后循环移动k位,其加解密可分别表示为: c=Ek(m)=m+k(mod 26) m=Dk(c)=c-k(mod 26) 其中,m.c.k是满足0≤m,c,k≤25的整数. 2.维吉尼亚密码 Vigenenre密码是最著名的

维吉尼亚密码加密、解密算法(破解还不会);

#include <iostream> #include<cstdio> using namespace std; void init_pass_table(char (&code_table)[27][27]){//制密码对照表;(不能当做一维数组来看会有别的问题) code_table[0][0]='0'; for(int i=0;i<26;i++){ code_table[0][1+i]='a'+i; } for(int i=0;i<26;i++){ co

第七次作业 信息安全、评估、密码技术

一.信息安全系统和安全体系 1.信息安全系统三维空间示意图中,X.Y.Z轴的名称,及它们各自包括的内容: (1)X轴 安全机制 包括:基础设施安全.平台安全.数据安全.通信安全.应用安全.运行安全.管理安全.审计安全.安全防范体系 (2)Y轴 OSI参考模型 包括:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 (3)Z轴 安全服务 包括:对等实体认证服务.访问控制服务.数据保密服务.数据完整性服务.数据源点认证服务.禁止否认服务.犯罪证据听服务. 2.MIS+S.S-MIS.S2-

信息安全加密技术--Polybius密码

1. 也称棋盘密码,是利用波利比奥斯方阵进行加密的密码方式,ADFGVX密码是德军在第一次世界大战中使用的栏块密码.事实上,它是早先一种密码 ADFGX 的增补版.1918年3月Fritz Nebel上校发明了这种密码,并提倡使用.它结合了改良过的Polybius方格替代密码与单行换位密码.这个密码以使用于密文当中六个字母 A, D, F, G, V, X命名.ADFGVX 是被法国陆军中尉 Georges Painvin 所破解的.以古典密码学的标准来说,此密码破解的工作是属于格外困难的,在这

加密解密五种算法的实现

1.  实验目的 通过五种加密解密算法的分析与设计,用高级语言实现加密解密过程.通过实验过程理解系统中加密解密的基本思想和实现方法. 2.  实验基本原理与方法 ①单字母替换加密方法——恺撒密码 加密方法是把英文字母按字母表的顺序编号作为明文,将密钥定为m,加密算法为将明文加上密钥m,得到密码表,通过相反的过程由密文得到明文. ②单字母替换加密方法——字母倒排序 在加密.解密的过程中明文和密文按照字母表的顺序倒排对应,即A对应Z,B对应Y. ③单字母替换加密方法——单表置换密码       由密

NPL ( neuro-linguistic programmers 神经语言程序员) / ( Neuro-Linguistic Programming 神经语言程序学/身心语言程式学/ 神经语言程式学/ 神经语言程式)

Neuro-Linguistic Programmers 神经语言程序员 Neuro-Linguistic Programming  神经语言程序学/身心语言程式学/ 神经语言程式学/ 神经语言程式 NLP是神经语言程序学 (Neuro-Linguistic Programming) 的英文缩写.在香港,也有意译为身心语法程式学的.N (Neuro) 指的是神经系统,包括大脑和思维过程.L (Linguistic) 是指语言,更准确点说,是指从感觉信号的输入到构成意思的过程.P (Program

信息安全加密技术--凯撒密码

凯撒密码技术是一种代替技术,也称作凯撒移位,是最简单的加密方式之一,在密码学中,凯撒密码(或称恺撒加密.恺撒变换.变换加密)是一种最简单且最广为人知的加密技术.它是一种替换加密的技术.这个加密方法是以恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系.恺撒密码通常被作为其他更复杂的加密方法中的一个步骤,例如维吉尼亚密码.恺撒密码还在现代的ROT13系统中被应用.但是和所有的利用字母表进行替换的加密技术一样,恺撒密码非常容易被破解,而且在实际应用中也无法保证通信安全. 1.加密公式: 密文=(

py3实现维吉尼亚加解密

实 验 目 的 1.  熟悉和掌握替代加密算法的原理及其一般过程: 2.掌握对称加密算法的基本方法:维吉尼亚密码 3.掌握使用一定的编码开发工具(对具体的开发平台和工具不作要求). 实 验 环 境   Python3+pycharm 实 验 步 骤 1.   维吉尼亚原理分析 Vigenenre 密码使用一个词组作为密钥,密钥中每一个字母用来确定一个代换表, 每一个密钥字母被用来加密一个明文字母,第一个密钥字母加密第一个明文字母, 第二个密钥字母加密第二个明文字母,等所有密钥字母使用完后,密钥再