浏览:2432008-03-31 03:15   来自旭少--烧猪      :

Crypter类中的消息填充算法....

if(a 不等于 0) a = 8 - a;

a = 8 - a;//这句的作用我一直想不明白.求阿不指点....

另外:

// 0xF8后面三位是空的,正好留给pos,因为pos是0到7的值,表示文本开始的字节位置
plain[0] = (byte)((Rand() & 0xF8) | pos);
0xF8二进制为11111000, 把三个空位留给pos后 在获得pos的值的时候 前面的11111不会影响吗?

求知识

------- 消息填充算法 ----------- 
      a = (明文长度 + 10) mod 8
      if(a 不等于 0) a = 8 - a;
      b = 随机数 & 0xF8 | a;              这个的作用是把a的值保存了下来
      plain[0] = b;                    然后把b做为明文的第0个字节,这样第0个字节就保存了a的信息,这个信息在解密时就要用来找到真正明文的起始位置
      plain[1 至 a+2] = 随机数 & 0xFF;    这里用随机数填充明文的第1到第a+2个字节
      plain[a+3 至 a+3+明文长度-1] = 明文; 从a+3字节开始才是真正的明文
      plain[a+3+明文长度, 最后] = 0;       在最后,填充0,填充到总长度为8的整数为止。到此为止,结束了,这就是最后得到的要加密的明文内容
------- 消息填充算法 ------------

楼主
  3个月前   阿不      :
嗯,这一段是LumaQQ里面的,我只是把它翻译过来了。这是QQ的一种加密算法。
回复  1楼 回到顶楼 
  3个月前   旭少--烧猪      :
那么阿不是怎么理解 a = 8 - a;这句话的意思的呢
回复  2楼 回到顶楼 
  3个月前   旭少--烧猪      :
主要是他起到的作用
回复  3楼 回到顶楼 
  3个月前   阿不      :
a 等于,它小于8的数值啊。
比如原来,a是5,那么执行a的值就是3啊。
不好意思,我真的没有太深入去理解它在上下环境中所起的作用。
回复  4楼 回到顶楼 
  3个月前   旭少--烧猪      :
mod取余的数,都是比8小的不是吗....
呵呵
回复  5楼 回到顶楼 
  3个月前   阿不      :
最模不一样的,取模是取余数。
回复  6楼 回到顶楼 
  3个月前   旭少--烧猪      :
mod不是取模运算符吗?
回复  7楼 回到顶楼 
  3个月前   阿不      :
mod就是取模,也就是取余
我说的不一样是指a = a mod 8 和 a= 8-a,这两个不一样。
回复  8楼 回到顶楼 
  3个月前   旭少--烧猪      :
回复  9楼 回到顶楼 
  3个月前   旭少--烧猪      :
已经理解了这个加密算法了
用二进制减法来得到位置的
回复  10楼 回到顶楼 

你还不是小组成员,加入小组以后才能发布新主题!
1 31145