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的整数为止。到此为止,结束了,这就是最后得到的要加密的明文内容
------- 消息填充算法 ------------