Cifrado XOR

El cifrado XOR es un método de cifrado utilizado para cifrar datos y es difícil de descifrar mediante el método de fuerza bruta, es decir, generar claves de cifrado aleatorias para que coincidan con la correcta. 

A continuación se muestra una implementación simple en C++. El concepto de implementación es primero definir XOR: clave de cifrado y luego realizar la operación XOR de los caracteres en la string con esta clave que desea cifrar. Para descifrar los caracteres cifrados, debemos realizar la operación XOR nuevamente con la clave definida. Aquí estamos encriptando todo el String. 

C++

// C++ program to implement XOR - Encryption
#include<bits/stdc++.h>
 
// The same function is used to encrypt and
// decrypt
void encryptDecrypt(char inpString[])
{
    // Define XOR key
    // Any character value will work
    char xorKey = 'P';
 
    // calculate length of input string
    int len = strlen(inpString);
 
    // perform XOR operation of key
    // with every character in string
    for (int i = 0; i < len; i++)
    {
        inpString[i] = inpString[i] ^ xorKey;
        printf("%c",inpString[i]);
    }
}
 
// Driver program to test above function
int main()
{
    char sampleString[] = "GeeksforGeeks";
 
    // Encrypt the string
    printf("Encrypted String: ");
    encryptDecrypt(sampleString);
    printf("\n");
 
    // Decrypt the string
    printf("Decrypted String: ");
    encryptDecrypt(sampleString);
 
    return 0;
}

Java

// Java program to implement XOR - Encryption
class XOREncryption
{
    // The same function is used to encrypt and
    // decrypt
    static String encryptDecrypt(String inputString)
    {
        // Define XOR key
        // Any character value will work
        char xorKey = 'P';
 
        // Define String to store encrypted/decrypted String
        String outputString = "";
 
        // calculate length of input string
        int len = inputString.length();
 
        // perform XOR operation of key
        // with every character in string
        for (int i = 0; i < len; i++)
        {
            outputString = outputString +
            Character.toString((char) (inputString.charAt(i) ^ xorKey));
        }
 
        System.out.println(outputString);
        return outputString;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String sampleString = "GeeksforGeeks";
 
        // Encrypt the string
        System.out.println("Encrypted String");
        String encryptedString = encryptDecrypt(sampleString);
 
        // Decrypt the string
        System.out.println("Decrypted String");
        encryptDecrypt(encryptedString);
    }
}
 
// This code is contributed by Vivekkumar Singh

Python3

# Python3 program to implement XOR - Encryption
 
# The same function is used to encrypt and
# decrypt
def encryptDecrypt(inpString):
 
    # Define XOR key
    # Any character value will work
    xorKey = 'P';
 
    # calculate length of input string
    length = len(inpString);
 
    # perform XOR operation of key
    # with every character in string
    for i in range(length):
     
        inpString = (inpString[:i] +
             chr(ord(inpString[i]) ^ ord(xorKey)) +
                     inpString[i + 1:]);
        print(inpString[i], end = "");
     
    return inpString;
 
# Driver Code
if __name__ == '__main__':
    sampleString = "GeeksforGeeks";
 
    # Encrypt the string
    print("Encrypted String: ", end = "");
    sampleString = encryptDecrypt(sampleString);
    print("\n");
 
    # Decrypt the string
    print("Decrypted String: ", end = "");
    encryptDecrypt(sampleString);
 
# This code is contributed by Princi Singh

C#

// C# program to implement XOR - Encryption
using System;
     
public class XOREncryption
{
    // The same function is used to encrypt and
    // decrypt
    static String encryptDecrypt(String inputString)
    {
        // Define XOR key
        // Any character value will work
        char xorKey = 'P';
 
        // Define String to store encrypted/decrypted String
        String outputString = "";
 
        // calculate length of input string
        int len = inputString.Length;
 
        // perform XOR operation of key
        // with every character in string
        for (int i = 0; i < len; i++)
        {
            outputString = outputString +
            char.ToString((char) (inputString[i] ^ xorKey));
        }
 
        Console.WriteLine(outputString);
        return outputString;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
        String sampleString = "GeeksforGeeks";
 
        // Encrypt the string
        Console.WriteLine("Encrypted String");
        String encryptedString = encryptDecrypt(sampleString);
 
        // Decrypt the string
        Console.WriteLine("Decrypted String");
        encryptDecrypt(encryptedString);
    }
}
 
// This code has been contributed by 29AjayKumar

Javascript

// JavaScript program to implement XOR - Encryption
 
// The same function is used to encrypt and
// decrypt
function encryptDecrypt(inpString)
{
    inpString = inpString.split("");
 
    // Define XOR key
    // Any character value will work
    let xorKey = 'P';
 
    // calculate length of input string
    let len = inpString.length;
 
    // perform XOR operation of key
    // with every character in string
    for (let i = 0; i < len; i++)
    {
        inpString[i] = (String.fromCharCode((inpString[i].charCodeAt(0)) ^ xorKey.charCodeAt(0)));
        process.stdout.write(inpString[i]);
    }
    return inpString.join("");
}
 
// Driver program to test above function
let sampleString = "GeeksforGeeks";
 
// Encrypt the string
process.stdout.write("Encrypted String: ");
sampleString = encryptDecrypt(sampleString);
process.stdout.write("\n");
 
// Decrypt the string
process.stdout.write("Decrypted String: ");
encryptDecrypt(sampleString);
 
// This code is contributed by phasing17
Producción

Encrypted String: 55;#6?"55;#
Decrypted String: GeeksforGeeks

La idea básica detrás del cifrado XOR es que, si no conoce la clave de cifrado XOR antes de descifrar los datos cifrados, es imposible descifrar los datos. Por ejemplo, si hace XOR dos variables desconocidas, no puede saber cuál es la salida de esas variables. Considere la operación A XOR B, y esto devuelve verdadero. Ahora, si se conoce el valor de una de las variables, podemos saber el valor de otra variable. Si A es Verdadero, entonces B debería ser Falso o si A es Falso, B debería ser verdadero de acuerdo con las propiedades de la operación booleana XOR. Sin conocer uno de los valores, no podemos descifrar los datos y esta idea se usa en XOR: cifrado.

Artículos relacionados:  
Cifrado Vigenère Cifrado  
César

Este artículo es una contribución de Harsh Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *