Cifrado de sustitución
Vuelva a imprimir la fuente
definición
Sea P = C = Z 26 , K está compuesto por todas las posibles permutaciones de 26 números 0,1, ... 25. Para cualquier π∈K, defina e π (x) = π (x) yd π (y) = π -1 (y), donde π -1 representa la permutación inversa de la permutación π.
En comparación con el cifrado por desplazamiento de la sección anterior, el cifrado y el descifrado del cifrado por desplazamiento son operaciones algebraicas, pero en el caso del cifrado de sustitución, el proceso de cifrado y descifrado se puede considerar simplemente como una permutación del alfabeto.
Debido a que la contraseña de sustitución es relativamente simple, no introduciremos demasiado. Cabe señalar que el tamaño del espacio clave de la contraseña de sustitución es 26!> 4.0 × 10 26 es un número grande, por lo que el método de ataque de fuerza bruta se usa incluso en la computadora También es imposible hacerlo, pero eso no significa que la contraseña de reemplazo no pueda ser descifrada. Usando otros métodos de criptoanálisis, la contraseña de reemplazo aún puede romperse.
Dar una castaña
Pruebe la contraseña de sustitución para cifrar el siguiente texto sin formato:
nos encontraremos a la medianoche,
Donde la permutación de π en Z 26 es la siguiente
X | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
π (x) | 23 | 13 | 24 | 0 | 7 | 15 | 14 | 6 | 25 | dieciséis | 22 | 1 | 19 | 18 | 5 | 11 | 17 | 2 | 21 | 12 | 20 | 4 | 10 | 9 | 3 | 8 |
Primero obtenga el número correspondiente a cada letra del siguiente alfabeto
UN | segundo | C | re | mi | F | GRAMO | H | yo | J | K | L | METRO | norte | O | PAGS | Q | R | S | T | U | V | W | X | Y | CON |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | dieciséis | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
disponible:
22 4 22 8 11 11 12 4 4 19 0 19 12 8 3 13 8 6 7 19
El número de textos cifrados disponibles de la permutación es:
10 7 10 25 1 1 12 7 7 12 23 12 19 28 0 18 28 14 6 12
El texto cifrado que se puede recuperar del alfabeto es:
KHKZ BBTH HMXM TZAS ZOGM
Código
package com.slp.cryptography;
import java.util.Arrays;
/**
* @ClassName SubstitutionCipher
* @Description 代换密码
* @Author sanglp
* @Date 2020/11/30 11:24
* @Version 1.0
**/
public class SubstitutionCipher {
static int[] arr = {
23,13,24,0,7,15,14,6,25,16,22,1,19,18,5,11,17,2,21,12,20,4,10,9,3,8};
static int[] arr2 = new int[26];
public static void main(String[] args) {
init();
enCrypt("wewillmeetatmidnight");
deCrypt("KHKZBBTHHMXMTZASZOGM");
}
/**
* 加密 代还密码需要先初始化一个代换表 在此我们用数组来表示
* @param resource
*/
private static void enCrypt(String resource){
char[] chararr = resource.toUpperCase().toCharArray();
StringBuilder result = new StringBuilder();
for(int i=0;i<chararr.length;i++){
result.append( (char) ('A'+arr[chararr[i]-'A']));
}
System.out.println(result);
}
/**
* 解密
* @param resource
*/
private static void deCrypt(String resource){
char[] chararr = resource.toUpperCase().toCharArray();
StringBuilder result = new StringBuilder();
for(int i=0;i<chararr.length;i++){
result.append( (char) ('A'+arr2[chararr[i]-'A']));
}
System.out.println(result);
}
/**
* 初始化逆置换矩阵
*/
private static void init(){
for(int i=0;i<26;i++){
arr2[arr[i]]=i;
}
System.out.println(Arrays.toString(arr2));
}
}