Go语言实现AzDG可逆加密算法实例
本文实例讲述了Go语言实现AzDG可逆加密算法。分享给大家供大家参考。具体实现方法如下:
packagemain
import( "fmt" "crypto/md5" "encoding/base64" "time" )
varcipher="密鑰" varh=md5.New()
funccipherEncode(sourceTextstring)string{ h.Write([]byte(cipher)) cipherHash:=fmt.Sprintf("%x",h.Sum(nil)) h.Reset() inputData:=[]byte(sourceText) loopCount:=len(inputData) outData:=make([]byte,loopCount) fori:=0;i<loopCount;i++{ outData[i]=inputData[i]^cipherHash[i%32] } returnfmt.Sprintf("%s",outData) }
funcencode(sourceTextstring)string{ h.Write([]byte(time.Now().Format("2006-01-0215:04:05"))) noise:=fmt.Sprintf("%x",h.Sum(nil)) h.Reset() inputData:=[]byte(sourceText) loopCount:=len(inputData) outData:=make([]byte,loopCount*2) fori,j:=0,0;i<loopCount;i,j=i+1,j+1{ outData[j]=noise[i%32] j++ outData[j]=inputData[i]^noise[i%32] } returnbase64.StdEncoding.EncodeToString([]byte(cipherEncode(fmt.Sprintf("%s",outData)))) }
funcdecode(sourceTextstring)string{ buf,err:=base64.StdEncoding.DecodeString(sourceText) iferr!=nil{ fmt.Println("Decode(%q)failed:%v",sourceText,err) return"" } inputData:=[]byte(cipherEncode(fmt.Sprintf("%s",buf))) loopCount:=len(inputData) outData:=make([]byte,loopCount) fori,j:=0,0;i<loopCount;i,j=i+2,j+1{ outData[j]=inputData[i]^inputData[i+1] } returnfmt.Sprintf("%s",outData) }
funcmain(){ s:=encode("張學友") fmt.Println(s) fmt.Println(decode(s)) }