1+ // Package crypter Fumo语
2+ package crypter
3+
4+ import (
5+ "encoding/base64"
6+ "fmt"
7+ "regexp"
8+ "strings"
9+ )
10+
11+ // Base64字符表
12+ const base64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
13+
14+ // Fumo语字符表 - 使用各种fumo变体来表示base64字符
15+ var fumoChars = []string {
16+ "fumo-" , "Fumo-" , "fUmo-" , "fuMo-" , "fumO-" , "FUmo-" , "FuMo-" , "FumO-" ,
17+ "fUMo-" , "fUmO-" , "fuMO-" , "FUMo-" , "FUmO-" , "fUMO-" , "FUMO-" , "fumo." ,
18+ "Fumo." , "fUmo." , "fuMo." , "fumO." , "FUmo." , "FuMo." , "FumO." , "fUMo." ,
19+ "fUmO." , "fuMO." , "FUMo." , "FUmO." , "fUMO." , "FUMO." , "fumo," , "Fumo," ,
20+ "fUmo," , "fuMo," , "fumO," , "FUmo," , "FuMo," , "FumO," , "fUMo," , "fUmO," ,
21+ "fuMO," , "FUMo," , "FuMO," , "fUMO," , "FUMO," , "fumo+" , "Fumo+" , "fUmo+" ,
22+ "fuMo+" , "fumO+" , "FUmo+" , "FuMo+" , "FumO+" , "fUMo+" , "fUmO+" , "fuMO+" ,
23+ "FUMo+" , "FUmO+" , "fUMO+" , "FUMO+" , "fumo|" , "Fumo|" , "fUmo|" , "fuMo|" ,
24+ "fumO|" , "FUmo|" , "FuMo|" , "FumO|" , "fUMo|" , "fUmO|" , "fuMO|" , "fumo/" ,
25+ "Fumo/" , "fUmo/" ,
26+ }
27+
28+ //Base64 2 Fumo
29+ // 创建编码映射表
30+ var encodeMap = make (map [byte ]string )
31+ // 创建解码映射表
32+ var decodeMap = make (map [string ]byte )
33+
34+ func init () {
35+ for i := 0 ; i < 64 && i < len (fumoChars ); i ++ {
36+ base64Char := base64Chars [i ]
37+ fumoChar := fumoChars [i ]
38+
39+ encodeMap [base64Char ] = fumoChar
40+ decodeMap [fumoChar ] = base64Char
41+ }
42+ }
43+
44+ //加密
45+ func encryptFumo (text string ) string {
46+ if text == "" {
47+ return "请输入要加密的文本"
48+ }
49+ textBytes := []byte (text )
50+ base64String := base64 .StdEncoding .EncodeToString (textBytes )
51+ base64Body := strings .TrimRight (base64String , "=" )
52+ paddingCount := len (base64String ) - len (base64Body )
53+ var fumoBody strings.Builder
54+ for _ , char := range base64Body {
55+ if fumoChar , exists := encodeMap [byte (char )]; exists {
56+ fumoBody .WriteString (fumoChar )
57+ } else {
58+ return fmt .Sprintf ("Fumo加密失败: 未知字符 %c" , char )
59+ }
60+ }
61+ result := fumoBody .String () + strings .Repeat ("=" , paddingCount )
62+
63+ return result
64+ }
65+
66+ //解密
67+ func decryptFumo (fumoText string ) string {
68+ if fumoText == "" {
69+ return "请输入要解密的Fumo语密文"
70+ }
71+ fumoBody := strings .TrimRight (fumoText , "=" )
72+ paddingCount := len (fumoText ) - len (fumoBody )
73+ fumoPattern := regexp .MustCompile (`(\w+[-.,+|/])` )
74+ fumoWords := fumoPattern .FindAllString (fumoBody , - 1 )
75+ reconstructed := strings .Join (fumoWords , "" )
76+ if reconstructed != fumoBody {
77+ return "Fumo解密失败: 包含无效的Fumo字符或格式错误"
78+ }
79+ var base64Body strings.Builder
80+ for _ , fumoWord := range fumoWords {
81+ if base64Char , exists := decodeMap [fumoWord ]; exists {
82+ base64Body .WriteByte (base64Char )
83+ } else {
84+ return fmt .Sprintf ("Fumo解密失败: 包含无效的Fumo字符 %s" , fumoWord )
85+ }
86+ }
87+ base64String := base64Body .String () + strings .Repeat ("=" , paddingCount )
88+ decodedBytes , err := base64 .StdEncoding .DecodeString (base64String )
89+ if err != nil {
90+ return fmt .Sprintf ("Fumo解密失败: Base64解码错误 %v" , err )
91+ }
92+ originalText := string (decodedBytes )
93+ return originalText
94+ }
0 commit comments