自定义字符串加密解密小工具

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 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);
    }
}

你可能感兴趣的:(java,开发语言)