最近这几天真的比较郁闷,却说不出为什么郁闷。很多事要做,但是都因为能力问题,时间都花得事倍功半。星期一又要来了,作业什么时候才能编好? 今天早上在弄了一个早上的DES算法,要是引用C#内部已封装好的DES还不简单?设置好密钥和向量就可以了,但是这样老师给的分数不高啊,而且自己真的想自己写一个出来。写着写着突然发现以现在自己已自学到的水平还很不够,还没有深入地去操作过某类数据,例如比特。DES的明文64比特,分左右两部分,这好办,前32位是4个byte,后32位是4个byte。但是,密钥除去8位校检码,只有56位啊,分左右两个部分那就是28位,28%8!=0哦,怎么办?于是就想到自己对C#里的位操作还是一无所知。 还好上网找了一下,看到了一线希望,是BitArray给我带来的希望。以下引用msdn的例子:
1using System; 2using System.Collections; 3
BitArray myBA1 = new BitArray( 5 ); myBA1为5位,取用默认初始化,5位都为 False。即为0,由此可见,平时一位的值0和1在C#里面变成False和True; byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 }; BitArray myBA3 = new BitArray( myBytes ); myBytes为byte数组,内容为1,2,3,4,5;二进制就是00000001,00000010,00000011,00000100,00000101,myBA3就为相应的5*8=40位; bool[] myBools = new bool[5] { true, false, true, true, false }; BitArray myBA4 = new BitArray( myBools ); 看输出,bool就想当于一位,myBools是长度为5的数组,变成myBA4后,也是5位; int[] myInts = new int[5] { 6, 7, 8, 9, 10 }; BitArray myBA5 = new BitArray( myInts ); int是32位的,5个,换成BitArray当然就是5*32=160。
还应注意的是PrintValues方法,参数(IEnumerable myList, int myWidth ),foreach()循环,每行打印8个。有了这个我想DES做起来主要问题就不大了。做好了发上来给大家看看啊。
原文地址:http://www.cnblogs.com/lanse777/archive/2007/04/01/695801.aspx
|
请发表评论