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