1^0=1 0^0=0 1^1=0 23^32=55 55^32=23 23对32进行异或两次运算结果为23
设key=[]byte{1,2,3,4,5,6},src=[]byte{11,22,33,44,55,66,77,88,99}
将src与key左对齐进行异或位运算数组
for i:=0;i<len(src);i++{ src[i]^=key[i%len(key)] }
得到的src便是加密后的[]byte数组加密
将加密后的src与key左对齐进行异或位运算code
for i:=0;i<len(src);i++{ src[i]^=key[i%len(key)] }
得到的src便是解密后的[]byte数组string
func main() { key := "dGhpcyBpcyBhIGV4YW1wbGVjenh2enh2emZhc2ZhZmE" str:="abcdefghijklmnopq" strBase64:=base64.StdEncoding.EncodeToString([]byte(str)) fmt.Println("加密前:",strBase64) // 1.对strBase64加密 enCodeStrBase64:=XorEncode(strBase64,key) fmt.Println("加密后:",enCodeStrBase64) // 2,对enCodeStrBase64解密 deCodeStrBase64:=XorDecode(enCodeStrBase64,key) fmt.Println("解密:",deCodeStrBase64) } func xor(src []byte, key []byte) []byte { for i := 0; i < len(src); i++ { src[i] ^= key[i%len(key)] } return src } func XorDecode(src, key string) string { srcByte, _ := base64.StdEncoding.DecodeString(src) keyByte, _ := base64.StdEncoding.DecodeString(key) srcByte = xor(srcByte, keyByte) return base64.StdEncoding.EncodeToString(srcByte) } func XorEncode(src,key string)string{ return XorDecode(src,key) }
输出结果:base64
加密前: YWJjZGVmZ2hpamtsbW5vcHE= 加密后: FQoKF0UPFEgISg4UDAMfHBQ= 解密: YWJjZGVmZ2hpamtsbW5vcHE=