Algoritmos criptográficos de construcción personalizados (criptografía híbrida)

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:
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:
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 g

Organice 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;
    }
}
Producción: 

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *