Java异或技操作给任意的文件加密原理及使用详解
异或操作和其原理
异或操作(XOR)是一种二进制运算,将两个数的对应位进行比较,不同为1,相同为0。例如,对于8位二进制数10110101和01101110进行异或操作,得到11011011。
异或操作的原理在于其对于同一个数进行两次异或操作,其值不变。即 a xor b xor b = a。因此,可以借助异或操作实现加密和解密的过程。
使用Java实现简单的文件加密
在Java中,可以使用异或操作对文件进行加密。具体的方法是将文件读取为二进制流,对其每个字节进行异或操作,再写入新文件中。解密过程则是读取加密文件,对其每个字节进行再次进行异或操作,写入新文件中。
以下是一个简单的文件加密程序:
import java.io.*;
public class EncryptFile {
public static void main(String[] args) {
File inputFile = new File("input.txt");
File encryptedFile = new File("encrypted.txt");
File decryptedFile = new File("decrypted.txt");
int key = 123;
encrypt(inputFile, encryptedFile, key);
decrypt(encryptedFile, decryptedFile, key);
}
private static void encrypt(File inputFile, File outputFile, int key) {
try (InputStream inputStream = new FileInputStream(inputFile);
OutputStream outputStream = new FileOutputStream(outputFile)) {
int nextByte;
while ((nextByte = inputStream.read()) != -1) {
outputStream.write(nextByte ^ key);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void decrypt(File inputFile, File outputFile, int key) {
encrypt(inputFile, outputFile, key);
}
}
以上代码中,输入文件为input.txt,输出文件加密后为encrypted.txt,解密后为decrypted.txt。加密和解密使用相同的过程,因此解密方法直接调用加密方法。
示例一:使用Java对图片进行加密和解密
import java.io.*;
public class ImageEncrypter {
public static void main(String[] args) {
File inputFile = new File("input.jpg");
File encryptedFile = new File("encrypted.jpg");
File decryptedFile = new File("decrypted.jpg");
int key = 123;
encrypt(inputFile, encryptedFile, key);
decrypt(encryptedFile, decryptedFile, key);
}
private static void encrypt(File inputFile, File outputFile, int key) {
try (InputStream inputStream = new FileInputStream(inputFile);
OutputStream outputStream = new FileOutputStream(outputFile)) {
int nextByte;
while ((nextByte = inputStream.read()) != -1) {
outputStream.write(nextByte ^ key);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void decrypt(File inputFile, File outputFile, int key) {
encrypt(inputFile, outputFile, key);
}
}
以上代码将图片文件input.jpg加密后输出为encrypted.jpg,再对其进行解密输出为decrypted.jpg。可以看到,由于文件中包含了二进制数据,加密后的图像并不能被识别,解密后才能正常显示。
示例二:使用Java对文本文件进行加密和解密
import java.io.*;
public class TextEncrypter {
public static void main(String[] args) {
File inputFile = new File("input.txt");
File encryptedFile = new File("encrypted.txt");
File decryptedFile = new File("decrypted.txt");
int key = 123;
encrypt(inputFile, encryptedFile, key);
decrypt(encryptedFile, decryptedFile, key);
}
private static void encrypt(File inputFile, File outputFile, int key) {
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
int nextChar;
while ((nextChar = reader.read()) != -1) {
writer.write(nextChar ^ key);
}
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void decrypt(File inputFile, File outputFile, int key) {
encrypt(inputFile, outputFile, key);
}
}
以上代码将文本文件input.txt加密后输出为encrypted.txt,再对其进行解密输出为decrypted.txt。可以看到,加密后的文件无法直接阅读,解密后才能正常显示。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java异或技操作给任意的文件加密原理及使用详解 - Python技术站