分两步:
第一步:将字符串转成16进制字母,
第二步:将字母按照一定的规律替换,换成key后面的那个字母;
package com.example;
import org.junit.Test;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* springmvc-02
* com.example
* 2023 11 2023/11/3 by Administrator
* 2023/11/3 14:08
* description:描述内容
**/
public class MyTest {
@Test
public void genKey() {
String key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ArrayList<String> keyList = new ArrayList<>();
for (int i = 0; i < key.length(); i++) {
keyList.add(String.valueOf(key.charAt(i)));
}
Collections.shuffle(keyList);//打乱
StringBuilder result = new StringBuilder();
for (String i : keyList) {
result.append(i);
}
System.out.println(result.toString());
}
public static String encode(String str) {
byte[] binaryData = str.getBytes(StandardCharsets.UTF_8);
StringBuilder hexString = new StringBuilder();
for (byte b : binaryData) {
hexString.append(String.format("%02X", b)); // 使用"%02X"将字节转换为两位的十六进制字符串
}
return hexString.toString();
}
public static String encode2(String text, String key) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
String c = String.valueOf(text.charAt(i));
int index = key.indexOf(c);
if (index != -1) {
index++;
if (index >= key.length()) {
index = 0;
}
stringBuilder.append(key.charAt(index));
} else {
stringBuilder.append(c);
}
}
return stringBuilder.toString();
}
public static String decode2(String text, String key) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
String c = String.valueOf(text.charAt(i));
int index = key.indexOf(c);
if (index != -1) {
index--;
if (index <0) {
index = key.length()-1;
}
stringBuilder.append(key.charAt(index));
} else {
stringBuilder.append(c);
}
}
return stringBuilder.toString();
}
// 步骤1:将十六进制字符串转换为二进制数据
public static String decode(String hexString) {
if (hexString.length() % 2 != 0) {
throw new IllegalArgumentException("Invalid hex string");
}
int length = hexString.length() / 2;
byte[] binaryData = new byte[length];
for (int i = 0; i < length; i++) {
int index = i * 2;
int high = Character.digit(hexString.charAt(index), 16);
int low = Character.digit(hexString.charAt(index + 1), 16);
if (high < 0 || low < 0) {
throw new IllegalArgumentException("Invalid hex string");
}
binaryData[i] = (byte) ((high << 4) + low);
}
return new String(binaryData);
}
}