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