[Go] Go语言版的AzDG可逆加密演算法 →→→→→进入此内容的聊天室

来自 , 2020-09-15, 写在 Go, 查看 164 次.
URL http://www.code666.cn/view/799fc232
  1. package main
  2.  
  3. import (
  4.         "fmt"
  5.         "crypto/md5"
  6.         "encoding/base64"
  7.         "time"
  8. )
  9.  
  10. var cipher = "密鑰"
  11. var h = md5.New()
  12.  
  13. func cipherEncode(sourceText string) string {  
  14.         h.Write([]byte(cipher))
  15.         cipherHash := fmt.Sprintf("%x", h.Sum(nil))
  16.         h.Reset()
  17.         inputData := []byte(sourceText)
  18.         loopCount := len(inputData)
  19.         outData := make([]byte,loopCount)
  20.         for i:= 0; i < loopCount ; i++ {
  21.                 outData[i] = inputData[i] ^ cipherHash[i%32]
  22.         }      
  23.         return fmt.Sprintf("%s", outData)
  24. }
  25.  
  26. func encode(sourceText string) string {
  27.         h.Write([]byte(time.Now().Format("2006-01-02 15:04:05")))
  28.         noise := fmt.Sprintf("%x", h.Sum(nil))
  29.         h.Reset()
  30.         inputData := []byte(sourceText)
  31.         loopCount := len(inputData)
  32.         outData := make([]byte,loopCount*2)
  33.        
  34.         for i, j := 0,0; i < loopCount ; i,j = i+1,j+1 {            
  35.                 outData[j] = noise[i%32]
  36.                 j++
  37.                 outData[j] = inputData[i] ^ noise[i%32]
  38.         }
  39.        
  40.         return base64.StdEncoding.EncodeToString([]byte(cipherEncode(fmt.Sprintf("%s", outData))))
  41. }
  42.  
  43. func decode(sourceText string) string {
  44.         buf, err := base64.StdEncoding.DecodeString(sourceText)
  45.         if err != nil {
  46.                 fmt.Println("Decode(%q) failed: %v", sourceText, err)
  47.                 return ""
  48.         }
  49.         inputData := []byte(cipherEncode(fmt.Sprintf("%s", buf)))
  50.         loopCount := len(inputData)
  51.         outData := make([]byte,loopCount)
  52.         for i, j := 0,0; i < loopCount ; i,j = i+2,j+1 {            
  53.                 outData[j] = inputData[i] ^ inputData[i+1]
  54.         }
  55.         return fmt.Sprintf("%s", outData)
  56. }
  57.  
  58. func main() {
  59.         s := encode("張學友")
  60.         fmt.Println(s)
  61.         fmt.Println(decode(s))
  62. }
  63.  
  64. //go/4358

回复 "Go语言版的AzDG可逆加密演算法"

这儿你可以回复上面这条便签

captcha