【Dat图片的位异或解密】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

文章目录


异或

异或(eor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为"⊕"计算机符号为"eor"。其运算法则为:

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)

如果a、b两个值不相同则异或结果为1。如果a、b两个值相同异或结果为0。

异或也叫半加运算其运算法则相当于不带进位的二进制加法:二进制下用1表示真0表示假则异或的运算法则为:0⊕0=01⊕0=10⊕1=11⊕1=0(同为0异为1)这些法则与加法是相同的只是不带进位所以异或常被认作不进位加法。

异或略称为XOR、EOR、EX-OR

程序中有三种演算子:XOR、eor、⊕。

使用方法如下

z = x ⊕ y

z = x eor y


提示:以下是本篇文章正文内容下面案例可供参考

一、图片字节标识

目前已知

jpg= FF D8

png =89 50

gif =47 49

Bmp=42 4D

二、开始异或计算

1.打开一个Dat文件示例

1.1 如果判断打开的Dat图片是什么类型呢?

  取出Dat的前两个字节上述图片取出的前两个字节为: 6E B7  已知  jpg= FF D8 png =89 50gif =47 49Bmp=42 4D

判断是否为Jpg:  用6E与FF异或 = 91(十六进制)  在用B7与D8异或=6F十六进制,可以明显的发现两次计算出得结果不一致,所以不是Jpg图片的类型依次类推只要两次计算结果是一致的,那么就是对应的图片类型 

图中正确的类型Png

6E与89=E7  ,B7与50=E7 E7就是解密的Key 对每一个字节与Key进行异或 就可以解密出图片了

func Format(filePath string) byte {
	buf, _ := ioutil.ReadFile(filePath)
	imgbytes := [3][]byte{
		{0xff, 0xd8},
		{0x89, 0x50},
		{0x47, 0x49},
	}
	for _, xor := range imgbytes {
		if xor[0]^buf[0] == xor[1]^buf[1] {
			return byte(xor[0] ^ buf[0])
		}
	}
	return byte(0)
}

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6