位与加密方式的速度非常快。若能保证其私有密钥的安全性,则位与加密的安全性很高,要破译几乎是不可能的。
但是位与加密的缺陷是灵活性较差,对私有密钥的管理是个头疼的问题。
在只需要简单粗暴的加密方式的环境下,这是个不错的选择。
?
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Arrays; public class Encryptor { public static byte[] encrypt(byte[] content, byte[] key) { if (key.length == 0) throw new IllegalArgumentException("key can not be empty!"); byte[] copy = Arrays.copyOf(content, content.length); encrypt1(copy, key, 0); return copy; } private static void encrypt1(byte[] content, byte[] key, int start) { if (start == content.length) return;// 递归结束条件 int end = start + key.length; if (end >= content.length) end = content.length; for (int i = start; i < end; i++) { content[i] ^= key[i - start]; } encrypt1(content, key, end); } public static byte[] decrypt(byte[] content, byte[] key) { // 异或的解密等于加密 return encrypt(content, key); } public static void encryptFile(File file, File output, byte[] privateKey) throws IOException { if(output.getParentFile()!=null) output.getParentFile().mkdirs(); FileInputStream fis = new FileInputStream(file); FileOutputStream fos = new FileOutputStream(output); byte[] buffer = new byte[8192]; int realSize = -1; try { while ((realSize = fis.read(buffer)) != -1) { byte[] encrypted = encrypt(buffer, privateKey); fos.write(encrypted,0,realSize); } } finally { fos.close(); fis.close(); } } public static void decryptFile(File file, File output, byte[] privateKey) throws IOException { encryptFile(file, output, privateKey); } public static void main(String[] args) throws Exception { byte[] key = "kiss".getBytes(); byte[] content = "dddefr12345adkfjsadfjladskfj".getBytes(); byte[] test = encrypt(content, key); System.out.println(new String(test)); test = decrypt(test, key); System.out.println(new String(test)); // encryptFile(new File("test"), new File("test2"), key); // decryptFile(new File("test2"), new File("test3"), key); } }?
小弟潜水好久~出来透个气。呼呼
?