mirror of
https://github.com/skyle1995/NetworkAuth.git
synced 2026-05-25 02:24:05 +08:00
New interface management
Optimize the pop-up interface
This commit is contained in:
241
utils/encrypt/easy.go
Normal file
241
utils/encrypt/easy.go
Normal file
@@ -0,0 +1,241 @@
|
||||
package encrypt
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// EasyEncrypt 易加密算法结构体
|
||||
type EasyEncrypt struct {
|
||||
encryptKey []int // 加密密钥
|
||||
decryptKey []int // 解密密钥
|
||||
}
|
||||
|
||||
// NewEasyEncrypt 创建新的易加密实例
|
||||
func NewEasyEncrypt(encryptKey, decryptKey []int) *EasyEncrypt {
|
||||
return &EasyEncrypt{
|
||||
encryptKey: encryptKey,
|
||||
decryptKey: decryptKey,
|
||||
}
|
||||
}
|
||||
|
||||
// GenerateEasyKey 生成易加密密钥对
|
||||
func GenerateEasyKey() ([]int, []int, error) {
|
||||
// 使用crypto/rand生成随机长度(15-30位)
|
||||
var lengthByte [1]byte
|
||||
|
||||
// 生成加密密钥长度
|
||||
if _, err := rand.Read(lengthByte[:]); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
encryptKeyLen := 15 + int(lengthByte[0])%16 // 15-30位随机长度
|
||||
|
||||
encryptKey := make([]int, encryptKeyLen)
|
||||
encryptBytes := make([]byte, encryptKeyLen)
|
||||
if _, err := rand.Read(encryptBytes); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
for i, b := range encryptBytes {
|
||||
encryptKey[i] = int(b) // 0-255范围
|
||||
}
|
||||
|
||||
// 生成解密密钥长度
|
||||
if _, err := rand.Read(lengthByte[:]); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
decryptKeyLen := 15 + int(lengthByte[0])%16 // 15-30位随机长度
|
||||
|
||||
decryptKey := make([]int, decryptKeyLen)
|
||||
decryptBytes := make([]byte, decryptKeyLen)
|
||||
if _, err := rand.Read(decryptBytes); err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
for i, b := range decryptBytes {
|
||||
decryptKey[i] = int(b) // 0-255范围
|
||||
}
|
||||
|
||||
return encryptKey, decryptKey, nil
|
||||
}
|
||||
|
||||
// Encrypt 加密函数 - 对应 UserLogin_encrypt_Up_42510
|
||||
func (e *EasyEncrypt) Encrypt(input string) string {
|
||||
if input == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
mKeyLen := len(e.encryptKey)
|
||||
inputLen := len(input)
|
||||
var result strings.Builder
|
||||
|
||||
for i := 0; i < inputLen; i++ {
|
||||
mCode := int(input[i])
|
||||
mCode = (mCode - 207) ^ e.encryptKey[i%mKeyLen]
|
||||
|
||||
if mCode < 0 {
|
||||
mCode = -mCode
|
||||
result.WriteString("-")
|
||||
}
|
||||
|
||||
// 转换为16进制字符串
|
||||
hexStr := strconv.FormatInt(int64(mCode), 16)
|
||||
result.WriteString(hexStr)
|
||||
result.WriteString(",")
|
||||
}
|
||||
|
||||
// Base64编码
|
||||
resultStr := result.String()
|
||||
return base64.StdEncoding.EncodeToString([]byte(resultStr))
|
||||
}
|
||||
|
||||
// Decrypt 解密函数 - 对应 UserLogin_decrypt_Down_42510
|
||||
func (e *EasyEncrypt) Decrypt(input string) string {
|
||||
if input == "" {
|
||||
return ""
|
||||
}
|
||||
|
||||
// Base64解码
|
||||
decoded, err := base64.StdEncoding.DecodeString(input)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
decodedStr := string(decoded)
|
||||
mKeyLen := len(e.encryptKey)
|
||||
|
||||
// 按逗号分割
|
||||
parts := strings.Split(decodedStr, ",")
|
||||
var result strings.Builder
|
||||
|
||||
for i, part := range parts {
|
||||
if part == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
var d int
|
||||
if strings.HasPrefix(part, "-") {
|
||||
// 处理负数
|
||||
hexStr := part[1:]
|
||||
val, err := strconv.ParseInt(hexStr, 16, 32)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
d = -int(val)
|
||||
} else {
|
||||
// 处理正数
|
||||
val, err := strconv.ParseInt(part, 16, 32)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
d = int(val)
|
||||
}
|
||||
|
||||
// 解密计算
|
||||
decryptedChar := (d ^ e.encryptKey[i%mKeyLen]) + 207
|
||||
result.WriteByte(byte(decryptedChar))
|
||||
}
|
||||
|
||||
return result.String()
|
||||
}
|
||||
|
||||
// EncryptWithKey 使用指定密钥加密
|
||||
func EncryptWithKey(input string, key []int) string {
|
||||
if input == "" || len(key) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
keyLen := len(key)
|
||||
inputLen := len(input)
|
||||
var result strings.Builder
|
||||
|
||||
for i := 0; i < inputLen; i++ {
|
||||
mCode := int(input[i])
|
||||
mCode = (mCode - 207) ^ key[i%keyLen]
|
||||
|
||||
if mCode < 0 {
|
||||
mCode = -mCode
|
||||
result.WriteString("-")
|
||||
}
|
||||
|
||||
hexStr := strconv.FormatInt(int64(mCode), 16)
|
||||
result.WriteString(hexStr)
|
||||
result.WriteString(",")
|
||||
}
|
||||
|
||||
resultStr := result.String()
|
||||
return base64.StdEncoding.EncodeToString([]byte(resultStr))
|
||||
}
|
||||
|
||||
// DecryptWithKey 使用指定密钥解密
|
||||
func DecryptWithKey(input string, key []int) string {
|
||||
if input == "" || len(key) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
decoded, err := base64.StdEncoding.DecodeString(input)
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
decodedStr := string(decoded)
|
||||
keyLen := len(key)
|
||||
|
||||
parts := strings.Split(decodedStr, ",")
|
||||
var result strings.Builder
|
||||
|
||||
for i, part := range parts {
|
||||
if part == "" {
|
||||
continue
|
||||
}
|
||||
|
||||
var d int
|
||||
if strings.HasPrefix(part, "-") {
|
||||
hexStr := part[1:]
|
||||
val, err := strconv.ParseInt(hexStr, 16, 32)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
d = -int(val)
|
||||
} else {
|
||||
val, err := strconv.ParseInt(part, 16, 32)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
d = int(val)
|
||||
}
|
||||
|
||||
decryptedChar := (d ^ key[i%keyLen]) + 40
|
||||
result.WriteByte(byte(decryptedChar))
|
||||
}
|
||||
|
||||
return result.String()
|
||||
}
|
||||
|
||||
// FormatKeyAsString 将密钥数组格式化为字符串(用于存储)
|
||||
func FormatKeyAsString(key []int) string {
|
||||
var parts []string
|
||||
for _, k := range key {
|
||||
parts = append(parts, fmt.Sprintf("%d", k))
|
||||
}
|
||||
return strings.Join(parts, ",")
|
||||
}
|
||||
|
||||
// ParseKeyFromString 从字符串解析密钥数组
|
||||
func ParseKeyFromString(keyStr string) []int {
|
||||
if keyStr == "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
parts := strings.Split(keyStr, ",")
|
||||
var key []int
|
||||
|
||||
for _, part := range parts {
|
||||
if val, err := strconv.Atoi(strings.TrimSpace(part)); err == nil {
|
||||
key = append(key, val)
|
||||
}
|
||||
}
|
||||
|
||||
return key
|
||||
}
|
||||
Reference in New Issue
Block a user