密码学:一.异或加密

异或加密是密码学中一种简单的加密算法,常作为更为复杂的加密算法的组成部分。

原理

异或运算:首先异或表示当两个数用二进制表示,进行异或运算时,当前位的两个二进制不同则为1相同则为0。
A ⊕ 0 = A
A ⊕ A = 0
A ⊕ B ⊕ B = A
文本的每个字符可以通过与给定的密钥进行按位异或运算来加密。如果要解密,只需要将加密后的结果与密钥再次进行按位异或运算即可。

异或运算

代码实践

golang

func main() {
	key := []byte{0x93, 0x44, 0x47, 0xa1, 0x13, 0x3d, 0x34, 0x23, 0xb1, 0x42, 0x11}
	cipher := enc("you are a good person",key)
	fmt.Println(cipher)
	fmt.Println(dec(cipher,key))
}


func enc(src string, key []byte) string {
	var result string
	j := 0
	s := ""
	bt := []rune(src)
	for i := 0; i < len(bt); i++ {
		s = strconv.FormatInt(int64(byte(bt[i])^key[j]), 16)
		if len(s) == 1 {
			s = "0" + s
		}
		result = result + (s)
		j = (j + 1) % len(key)
	}
	return result
}

func dec(src string, key []byte) string {
	var result string
	var s int64
	j := 0
	bt := []rune(src)
	for i := 0; i < len(src)/2; i++ {
		s, _ = strconv.ParseInt(string(bt[i*2:i*2+2]), 16, 0)
		result = result + string(byte(s)^key[j])
		j = (j + 1) % len(key)
	}
	return result
}

php

$key = "this is the key";
$content = "you are a good person";
$cipher = enc($content,$key);
var_dump($cipher);
echo dec($cipher, $key);

function enc($str,$key){
    return str_replace('=','',base64_encode($str ^ $key));
}

function dec($str,$key){
    return base64_decode($str) ^ $key;
}

异或密码值得使用的原因主要是其易于实现,而且计算成本小。简单重复异或加密有时用于不需要特别安全的情况下来隐藏信息。
如果使用不断重复的密钥,利用频率分析就可以破解这种简单的异或密码。一旦消息的内容被猜出或知道,密钥就会泄露。
如果密钥是随机的(不重复),异或密码就会更为安全。若密钥是真正随机的,结果就是一次性密码本,这种密码在理论上是不可破解的。

posted @   EthanWell  阅读(1468)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示