Google 新推的 Go 語言還滿易學的,看了一些 http://golang.org/ 線上文件, 花了二個小時就把 AzDG 可逆加密演算法遷移到 Go 語言上。 
AzDG  中有使用到 base64、md5,看本例後就知道怎使....... 
Objective-C還真不易學習。 

 

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