package com.example;
import org.junit.Test;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
/**
*
* com.example
* 2023 11 2023/11/3 by Administrator
* 2023/11/3 14:08
* description:描述内容
**/
public class MyTest {
@Test
public void Test() {
String encodeStr = encode("{\"v_url\":\"https://www.baidu.com\",\"channel_id\":\"33\",\"a_json_url\":\"https://www.google.com\",\"g_json_url\":\"https://www.csdn.net"}");
System.out.println(encodeStr);
System.out.println(decode(encodeStr));
String encodestr2 = encode2(encodeStr, "VEFBRZXJTWOGCYSPALIDMKUHQN");
System.out.println(encodestr2);
System.out.println(decode(decode2(encodestr2,"VEFBRZXJTWOGCYSPALIDMKUHQN")));
}
@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);
}
}
自定义字符串加密解密小工具
于 2023-11-08 10:23:15 首次发布