zoukankan      html  css  js  c++  java
  • XOR+base64加密

    1.xor运算

     1^0=1
     0^0=0
     1^1=0
     
     23^32=55
     55^32=23
     
     23对32进行异或两次运算结果为23
    

    2.XOR加密

    设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数组

    3.XOR解密

    将加密后的src与key左对齐进行异或位运算

    for i:=0;i<len(src);i++{
        src[i]^=key[i%len(key)]
     }
    

    获得的src即是解密后的[]byte数组

    4.XOR+base64进行加密

    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)
    }
    

    输出结果:

    加密前: YWJjZGVmZ2hpamtsbW5vcHE=
    加密后: FQoKF0UPFEgISg4UDAMfHBQ=
    解密: YWJjZGVmZ2hpamtsbW5vcHE=
  • 相关阅读:
    拒绝喝酒理由1
    动态调用事件,事件的方法
    c#发送图片
    c#截屏功能的实现
    devexpress中文讨论论坛
    解析javascript变量
    devexpress_PivotGrid说明
    python学习之老男孩python全栈第九期_day022知识点总结——初识面向对象
    python学习之老男孩python全栈第九期_day022作业
    员工信息表
  • 原文地址:https://www.cnblogs.com/fwdqxl/p/9443094.html
Copyright © 2011-2022 走看看