吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3868|回复: 65
收起左侧

[Java 原创] [Java原创] 专属于中国人的加密方法--红色加密(内附在线演示网站)

  [复制链接]
wystudio 发表于 2023-7-14 13:50
本帖最后由 wystudio 于 2023-7-16 15:11 编辑

本文只是提供一种思路,中途的代码可以再加修改

前言

本加密算法是在作者逛论坛时由坛友一篇文章引发的灵感【前端逆向】社会主义核心价值观加密方法解析+python版复现
这篇文章介绍了一种名为 社会主义核心价值观加密方法 旨在通过编程学习党的十八大提出的社会主义核心价值观。  

而本文提到的加密算法灵感来自于此,但加密原理与此加密方法完全不同

算法介绍

之所以取这个名字,那是因为加密后的密文以中文汉字输出,且内容积极,阳光,向上。  

例如:
原文为 "06"
则密文为 "中国"  

注:支持中文汉字,英文,数字,以及特殊符号加密

算法原理

1.将原文进行URL编码

目的:将中文汉字转为使用字母+数字替代

2.转为十六进制

将上一步得到的字符串转为16进制文本(小写)
目的:将整个字符串变为只由6个字母[a-f]和9个数字[0-9]组成

3.转为char[]数组

将上一步得到的字符串转为由一个一个字符组成的char[]数组
例如:"123" 变成 {"1","2","3"}
目的:为下一步的索引提供准备

4.遍历char[]数组

遍历上一步得到的char[]数组,将有以下两种情况:

①遍历得到的元素为[0-9]的数字

将此数字作为索引,从 常量文本数组一 中获取元素

常量文本数组一 = {"中","华","人","民","共","和","国","万","岁","政"}  

假如数字为1,则得到"华"

②遍历得到的元素为[a-f]的字母

先获取这个字母在26个英文字母表中的位置
如a为1,b为2
将获取到的数字减1作为索引。从 常量文本数组二 中获取元素  

常量文本数组二 = {"富","强","文","明","平","等"}  

假如字母为b,则获取到"强"

5.拼接即可

将上一步遍历char[]数组从常量文本数组中获取的元素拼接起来,最后输出即为密文  

解密过程相反即可

算法代码

package xyz.wystudio.tool;

import java.util.regex.Matcher;
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.io.UnsupportedEncodingException;
import java.util.regex.Pattern;

public class EncryptUtil {

    private static final String[] LIST_CODE_EN = { "富", "强", "文", "明", "平", "等" };
    private static final String[] LIST_CODE_NUM = { "中", "华", "人", "民", "共", "和", "国", "万", "岁", "红" };
    private static final String[] LIST_HEX = { "a", "b", "c", "d", "e", "f" };

    public static String encode(String str) {
        str = URLencode(str);
        String hexString = StringtoHex(str);
        return doInString(hexString);
    }

    public static String decode(String str) {
        try {
            StringBuffer sb = new StringBuffer();
            char[] chars = str.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                if (findInNum(chars[i]) != -1) {
                    sb.append(findInNum(chars[i]));
                } else {
                    if (findInEn(chars[i]) != -1) {
                        sb.append(LIST_HEX[findInEn(chars[i])]);
                    }
                }
            }
            if(sb.toString().equals("") || sb.toString() == null){
                return "解密失败非密文";
            }
            return URLdecode(HextoString(sb.toString()));
        } catch (Exception e) {
            return "解密失败非密文";
        }
    }

    private static String StringtoHex(String str) {
        StringBuffer sb = new StringBuffer();
        //将字符串转换为字符数组
        char ch[] = str.toCharArray();
        for (int i = 0; i < ch.length; i++) {
            String hexString = Integer.toHexString(ch[i]);
            sb.append(hexString);
        }
        String result = sb.toString();
        return result;
    }

    private static String HextoString(String str) {
        String result = new String();
        char[] charArray = str.toCharArray();
        for (int i = 0; i < charArray.length; i = i + 2) {
            String st = "" + charArray[i] + "" + charArray[i + 1];
            char ch = (char) Integer.parseInt(st, 16);
            result = result + ch;
        }
        return result;
    }

    private static String doInString(String str) {
        StringBuffer sb = new StringBuffer();
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if (isNum(chars[i])) {
                sb.append(LIST_CODE_NUM[Integer.parseInt(chars[i] + "")]);
            } else {
                sb.append(LIST_CODE_EN[EntoInt(chars[i]) - 1]);
            }
        }
        return sb.toString();
    }

    private static boolean isNum(char str) {
        Pattern pattern = Pattern.compile("[0-9]*");
        Matcher isNum = pattern.matcher(str + "");
        if (!isNum.matches()) {
            return false;
        }
        return true;
    }

    private static int EntoInt(char ch1) {
        String str = ch1 + "";
        char ch = str.charAt(0);
        int num = 0;
        if (ch >= 'a' && ch <= 'z')
            num = (int) ch - 96;
        if (ch >= 'A' && ch <= 'Z')
            num = (int) ch - 64;
        return num;
    }

    private static int findInEn(char ch) {
        String str = ch + "";
        int a = -1;
        for (int i = 0; i < LIST_CODE_EN.length; i++) {
            if (LIST_CODE_EN[i].equals(str)) {
                a = i;
                break;
            }
        }
        return a;
    }

    private static int findInNum(char ch) {
        String str = ch + "";
        int a = -1;
        for (int i = 0; i < LIST_CODE_NUM.length; i++) {
            if (LIST_CODE_NUM[i].equals(str)) {
                a = i;
                break;
            }
        }
        return a;
    }

    private static String URLencode(String str) {
        try {
            return URLEncoder.encode(str, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return str;
        }
    }

    private static String URLdecode(String str) {
        try {
            return URLDecoder.decode(str, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return str;
        }
    }
}

加密方法调用EncryptUtil.encode()函数,并传入原文
解密方法调用EncryptUtil.decode()函数,并传入密文

写在最后

本加密算法仅供学习交流,禁止用于非法用途  

在线尝试网站:https://api.wystudio.xyz/wy/ZGHSEncrypt/ (无联系方式)

本文已同步发至作者博客立即查看 (无联系方式)

免费评分

参与人数 7威望 +1 吾爱币 +16 热心值 +6 收起 理由
wyt00a + 1 + 1 用心讨论,共获提升!
Harmon666 + 1 热心回复!
MeetAfterglow + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
苏紫方璇 + 1 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
XYZ1234567890 + 1 我很赞同!
Tonyha7 + 2 + 1 用心讨论,共获提升!
colaya + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wystudio 发表于 2023-7-14 14:26
本帖最后由 wystudio 于 2023-7-16 11:52 编辑

人和共和民和人和民红民中人和共人共和人和共和民万人和民岁民岁人和共人民华人和共和民万人和共华民中人和共人民共人和共和民岁人和共华民万人和共华民民人和共和民岁人和共华共和人和共人共华人和共和民和人和民红共共人和民红共人民国民国民国


大家把这上面这段文本解密看看是什么
 楼主| wystudio 发表于 2023-7-14 18:43
pojie6033 发表于 2023-7-14 18:23
本质上就是替换。
加密是有乘法,异或,密钥扩散之类的操作

只是提供一种思路,中途索引的获取可以再进行其他更复杂的操作
XYZ1234567890 发表于 2023-7-16 15:59

回帖奖励 +1 CB吾爱币

解密——吾爱破解论坛666
colaya 发表于 2023-7-14 14:22
学习了 谢谢
Bszk 发表于 2023-7-14 14:51
改了码表,看不出来新在何处。
 楼主| wystudio 发表于 2023-7-14 15:07
Bszk 发表于 2023-7-14 14:51
改了码表,看不出来新在何处。

只是提供一个思路罢了
pojie6033 发表于 2023-7-14 18:23
本质上就是替换。
加密是有乘法,异或,密钥扩散之类的操作
 楼主| wystudio 发表于 2023-7-16 09:55
手动顶贴
不知道改成啥 发表于 2023-7-16 14:53

回帖奖励 +1 CB吾爱币

红色加密感觉很吊的样子
ltylsy 发表于 2023-7-16 14:55

回帖奖励 +1 CB吾爱币

这个只能看看!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 13:21

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表