La criptografía se puede definir como un arte de codificar y decodificar los patrones (en forma de mensajes).
La criptografía es un concepto muy sencillo que se ocupa de manipular las strings (o el texto) para que sean ilegibles para la persona intermedia. Tiene una forma muy eficaz de cifrar o descifrar el texto procedente de las otras partes. Algunos de los ejemplos son, Caesar Cipher, Viginere Cipher, Columnar Cipher, DES, AES y la lista continúa. Para desarrollar un algoritmo criptográfico personalizado, se pueden utilizar algoritmos de cifrado híbrido.
El cifrado híbrido es un concepto de criptografía que combina/fusiona uno o dos algoritmos criptográficos para generar texto cifrado más eficaz.
Ejemplo:
Algoritmo de criptografía FibBil
Planteamiento del problema:
Programa para generar un texto encriptado, mediante el cálculo de la Serie Fibonacci, sumando los términos de la Serie Fibonacci con cada letra del texto plano, hasta la longitud de la clave.
Algoritmo:
Para el cifrado: tome una entrada de texto sin formato y clave del usuario, invierta el texto sin formato y concatene el texto sin formato con la clave, copie la string en una array. Después de copiar, separe los elementos de la array en dos partes, EvenArray y OddArray, en las que el índice par de una array se colocará en EvenArray y lo mismo para OddArray. Comience a generar la Serie F(i) de Fibonacci hasta la longitud de la clave j tal que c=i+j donde c es texto cifrado con mod 26. Agregue todos los elementos c th en una CipherString y, ¡entonces Cifrado Listo! . Cuando se usa el concepto de resumen, se destaca la implementación del Cifrado César.
Para Descifrado: Viceversa del Algoritmo de Cifrado
Ejemplo para el Algoritmo:
Entrada: hola
Clave: abcd
Salida: riobkxezg
Invierta la entrada, olleh, agregue esto con la clave, es decir, ollehabcd.
EvenString: leac
OddString: olhbd
Como la longitud de la clave es 4, se generará un bucle de 4 veces, incluido FibNum 0, que se ignora.
Para cifrados de array par:
FibNum: 1
En array par para l y FibNum 1 cip es k
En array par para e y FibNum 1 cip es d
En array par para a y FibNum 1 cip es z
En array par para c y FibNum 1 cip es b
FibNum: 2
En array par para l y FibNum 2 cip es j
En array par para e y FibNum 2 cip es c
En array par para a y FibNum 2 cip es y
En array par para c y FibNum 2 cip es un
FibNum: 3 (letras calculadas finales)
En array par para l y FibNum 3 cip es i
En array par para e y FibNum 3 cip es b
En array par para a y FibNum 3 cip es x
En array par para c y FibNum 3 cip es z
Para cifrados de array impar
FibNum: 1
En array impar para o y FibNum 1 cip es p
En array impar para l y FibNum 1 cip es m
En array impar para h y FibNum 1 cip es i
En array impar para b y FibNum 1 cip es c
En array impar para d y FibNum 1 cip es e
FibNum: 2
En array impar para o y FibNum 2 cip es q
En array impar para l y FibNum 2 cip es n
En array impar para h y FibNum 2 cip es j
En array impar para b y FibNum 2 cip es d
En array impar para d y FibNum 2 cip es f
FibNum: 3 (letras calculadas finales)
En array impar para o y FibNum 3 cip es r
en array impar para l y FibNum 3 cip es o
en array impar para h y FibNum 3 cip es k
en array impar para b y FibNum 3 cip es e
en array impar para d y FibNum 3 cip es gOrganice EvenArrayCiphers y OddArrayCiphers en su orden de índice, por lo que el Cifrado de string final será, riobkxezg
Programa:
C++14
#include<bits/stdc++.h> using namespace std; string encryptText(string password, string key) { int a = 0, b = 1, c = 0, m = 0, k = 0, j = 0; string cipher = "", temp = ""; // Declare a password string string pw = password; // Reverse the String reverse(pw.begin(), pw.end()); pw = pw + key; // For future Purpose temp = pw; string stringArray = temp; string evenString = "", oddString = ""; // Declare EvenArray for storing // even index of stringArray string evenArray; // Declare OddArray for storing // odd index of stringArray string oddArray; // Storing the positions in their // respective arrays for(int i = 0; i < stringArray.length(); i++) { if (i % 2 == 0) { oddString = oddString + stringArray[i]; } else { evenString = evenString + stringArray[i]; } } evenArray = new char[evenString.length()]; oddArray = new char[oddString.length()]; // Generate a Fibonacci Series // Upto the Key Length while (m <= key.length()) { // As it always starts with 1 if (m == 0) m = 1; else { // Logic For Fibonacci Series a = b; b = c; c = a + b; for(int i = 0; i < evenString.length(); i++) { // Caesar Cipher Algorithm Start // for even positions int p = evenString[i]; int cip = 0; if (p == '0' || p == '1' || p == '2' || p == '3' || p == '4' || p == '5' || p == '6' || p == '7' || p == '8' || p == '9') { cip = p - c; if (cip < '0') cip = cip + 9; } else { cip = p - c; if (cip < 'a') { cip = cip + 26; } } evenArray[i] = (char)cip; // Caesar Cipher Algorithm End } for(int i = 0; i < oddString.length(); i++) { // Caesar Cipher Algorithm // Start for odd positions int p = oddString[i]; int cip = 0; if (p == '0' || p == '1' || p == '2' || p == '3' || p == '4' || p == '5' || p == '6' || p == '7' || p == '8' || p == '9') { cip = p + c; if (cip > '9') cip = cip - 9; } else { cip = p + c; if (cip > 'z') { cip = cip - 26; } } oddArray[i] = (char)cip; // Caesar Cipher Algorithm End } m++; } } // Storing content of even and // odd array to the string array for(int i = 0; i < stringArray.size(); i++) { if (i % 2 == 0) { stringArray[i] = oddArray[k]; k++; } else { stringArray[i] = evenArray[j]; j++; } } // Generating a Cipher Text // by stringArray (Caesar Cipher) for(char d : stringArray) { cipher = cipher + d; } // Return the Cipher Text return cipher; } // Driver code int main() { string pass = "hello"; string key = "abcd"; cout << encryptText(pass, key); return 0; } // This code is contributed by himanshu77
Java
import java.util.*; import java.lang.*; class GFG { public static void main(String[] args) { String pass = "hello"; String key = "abcd"; System.out.println(encryptText(pass, key)); } public static String encryptText(String password, String key) { int a = 0, b = 1, c = 0, m = 0, k = 0, j = 0; String cipher = "", temp = ""; // Declare a password string StringBuffer pw = new StringBuffer(password); // Reverse the String pw = pw.reverse(); pw = pw.append(key); // For future Purpose temp = pw.toString(); char stringArray[] = temp.toCharArray(); String evenString = "", oddString = ""; // Declare EvenArray for storing // even index of stringArray char evenArray[]; // Declare OddArray for storing // odd index of stringArray char oddArray[]; // Storing the positions in their respective arrays for (int i = 0; i < stringArray.length; i++) { if (i % 2 == 0) { oddString = oddString + Character.toString(stringArray[i]); } else { evenString = evenString + Character.toString(stringArray[i]); } } evenArray = new char[evenString.length()]; oddArray = new char[oddString.length()]; // Generate a Fibonacci Series // Upto the Key Length while (m <= key.length()) { // As it always starts with 1 if (m == 0) m = 1; else { // Logic For Fibonacci Series a = b; b = c; c = a + b; for (int i = 0; i < evenString.length(); i++) { // Caesar Cipher Algorithm Start for even positions int p = evenString.charAt(i); int cip = 0; if (p == '0' || p == '1' || p == '2' || p == '3' || p == '4' || p == '5' || p == '6' || p == '7' || p == '8' || p == '9') { cip = p - c; if (cip < '0') cip = cip + 9; } else { cip = p - c; if (cip < 'a') { cip = cip + 26; } } evenArray[i] = (char)cip; /* Caesar Cipher Algorithm End*/ } for (int i = 0; i < oddString.length(); i++) { // Caesar Cipher Algorithm Start for odd positions int p = oddString.charAt(i); int cip = 0; if (p == '0' || p == '1' || p == '2' || p == '3' || p == '4' || p == '5' || p == '6' || p == '7' || p == '8' || p == '9') { cip = p + c; if (cip > '9') cip = cip - 9; } else { cip = p + c; if (cip > 'z') { cip = cip - 26; } } oddArray[i] = (char)cip; // Caesar Cipher Algorithm End } m++; } } // Storing content of even and // odd array to the string array for (int i = 0; i < stringArray.length; i++) { if (i % 2 == 0) { stringArray[i] = oddArray[k]; k++; } else { stringArray[i] = evenArray[j]; j++; } } // Generating a Cipher Text // by stringArray (Caesar Cipher) for (char d : stringArray) { cipher = cipher + d; } // Return the Cipher Text return cipher; } }
riobkxezg
Conclusión:
Los Algoritmos Híbridos para la criptografía son efectivos, por lo que no es muy fácil detectar el patrón y decodificar el mensaje. Aquí, el algoritmo es una combinación de función matemática y cifrado César, para implementar el algoritmo de criptografía híbrida.
Publicación traducida automáticamente
Artículo escrito por bilal-hungund y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA