package mainimport (_ "bytes"_ "container/list"_ "encoding/binary""encoding/hex""fmt""github.com/astaxie/beego"_ "math""strconv""strings")type MainController struct {beego.Controller}func (this *MainController) Encode() {text := this.GetString("text")this.Ctx.WriteString(encodeText(text))}func (this *MainController) Decode() {text := this.GetString("text")this.Ctx.WriteString(decodeText(text))}func main() {// beego.SetStaticPath("/views", "views")// beego.SetStaticPath("/", "views/index.html")// beego.AutoRouter(&MainController{})// beego.Run()bData := encodeText("我去你妈的b")fmt.Println(bData)fmt.Println(decodeText(bData))}//加密func encodeText(text string) (resultStr string) {strs := strings.Split(text, "") //分割字符串for _, element := range strs {str := []byte(element)hexStr := hex.EncodeToString(str)length := len(hexStr)lengthB := strconv.FormatInt(int64(length), 2)bLen := len(lengthB)if bLen < 3 {for i := 0; i < (3 - bLen); i++ {lengthB = "0" + lengthB}}resultStr += lengthBhexChars := strings.Split(hexStr, "") //分割字符串for _, element := range hexChars {resultStr += hexToBinary(element)}}return resultStr}//十进制转换成十六进制func numToChar(num int64) (result string) {switch num {case 10:result = "A"case 11:result = "B"case 12:result = "C"case 13:result = "D"case 14:result = "E"case 15:result = "F"default:result = strconv.Itoa(int(num))}return result}//十六进制转换成十进制func charToNum(char string) (result int64) {char = strings.ToUpper(char)var num stringswitch char {case "A":num = "10"case "B":num = "11"case "C":num = "12"case "D":num = "13"case "E":num = "14"case "F":num = "15"default:num = char}result, _ = strconv.ParseInt(num, 10, 64)return result}//十六进制转换成二进制func hexToBinary(text string) (data string) {strs := strings.Split(text, "")for _, element := range strs {num := charToNum(element)bData := strconv.FormatInt(num, 2)length := len(bData)if length < 4 {//不够四位就补全四位for i := 0; i < (4 - length); i++ {bData = "0" + bData}}data += bData}return data}func checkErr(err error) {if err != nil {panic(err)}}//解密func decodeText(text string) string {var pointer intvar result stringfor pointer < len(text) {lengthB := SubString(text, pointer, 3)pointer += 3length, _ := strconv.ParseInt(lengthB, 2, 64)var tempStr stringfor i := 0; i < int(length); i++ {charB := SubString(text, pointer, 4)pointer += 4char, _ := strconv.ParseInt(charB, 2, 0)tempStr = tempStr + numToChar(char)}tenStr, _ := hex.DecodeString(tempStr)result += string(tenStr)}return result}//获取子字符串func SubString(str string, begin, length int) (substr string) {// 将字符串的转换成[]runers := []rune(str)lth := len(rs)// 简单的越界判断if begin < 0 {begin = 0}if begin >= lth {begin = lth}end := begin + lengthif end > lth {end = lth}// 返回子串return string(rs[begin:end])}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。