【Dat图片的位异或解密】

文章目录


异或

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

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

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

异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0⊕0=0,1⊕0=1,0⊕1=1,1⊕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 50,gif =47 49,Bmp=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)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值