最近这几天真的比较郁闷,却说不出为什么郁闷。很多事要做,但是都因为能力问题,时间都花得事倍功半。星期一又要来了,作业什么时候才能编好?
       今天早上在弄了一个早上的DES算法,要是引用C#内部已封装好的DES还不简单?设置好密钥和向量就可以了,但是这样老师给的分数不高啊,而且自己真的想自己写一个出来。写着写着突然发现以现在自己已自学到的水平还很不够,还没有深入地去操作过某类数据,例如比特。DES的明文64比特,分左右两部分,这好办,前32位是4个byte,后32位是4个byte。但是,密钥除去8位校检码,只有56位啊,分左右两个部分那就是28位,28%8!=0哦,怎么办?于是就想到自己对C#里的位操作还是一无所知。
       还好上网找了一下,看到了一线希望,是BitArray给我带来的希望。以下引用msdn的例子:
 using System;
using System;2
 using System.Collections;
using System.Collections;3
 public class SamplesBitArray  {
public class SamplesBitArray  {4

5
 public static void Main()  {
   public static void Main()  {6

7
 // Creates and initializes several BitArrays.
      // Creates and initializes several BitArrays.8
 BitArray myBA1 = new BitArray( 5 );
      BitArray myBA1 = new BitArray( 5 );9

10
 BitArray myBA2 = new BitArray( 5, false );
      BitArray myBA2 = new BitArray( 5, false );11

12
 byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
      byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };13
 BitArray myBA3 = new BitArray( myBytes );
      BitArray myBA3 = new BitArray( myBytes );14

15
 bool[] myBools = new bool[5] { true, false, true, true, false };
      bool[] myBools = new bool[5] { true, false, true, true, false };16
 BitArray myBA4 = new BitArray( myBools );
      BitArray myBA4 = new BitArray( myBools );17

18
 int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
      int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };19
 BitArray myBA5 = new BitArray( myInts );
      BitArray myBA5 = new BitArray( myInts );20

21
 // Displays the properties and values of the BitArrays.
      // Displays the properties and values of the BitArrays.22
 Console.WriteLine( "myBA1" );
      Console.WriteLine( "myBA1" );23
 Console.WriteLine( "   Count:    {0}", myBA1.Count );
      Console.WriteLine( "   Count:    {0}", myBA1.Count );24
 Console.WriteLine( "   Length:   {0}", myBA1.Length );
      Console.WriteLine( "   Length:   {0}", myBA1.Length );25
 Console.WriteLine( "   Values:" );
      Console.WriteLine( "   Values:" );26
 PrintValues( myBA1, 8 );
      PrintValues( myBA1, 8 );27

28
 Console.WriteLine( "myBA2" );
      Console.WriteLine( "myBA2" );29
 Console.WriteLine( "   Count:    {0}", myBA2.Count );
      Console.WriteLine( "   Count:    {0}", myBA2.Count );30
 Console.WriteLine( "   Length:   {0}", myBA2.Length );
      Console.WriteLine( "   Length:   {0}", myBA2.Length );31
 Console.WriteLine( "   Values:" );
      Console.WriteLine( "   Values:" );32
 PrintValues( myBA2, 8 );
      PrintValues( myBA2, 8 );33

34
 Console.WriteLine( "myBA3" );
      Console.WriteLine( "myBA3" );35
 Console.WriteLine( "   Count:    {0}", myBA3.Count );
      Console.WriteLine( "   Count:    {0}", myBA3.Count );36
 Console.WriteLine( "   Length:   {0}", myBA3.Length );
      Console.WriteLine( "   Length:   {0}", myBA3.Length );37
 Console.WriteLine( "   Values:" );
      Console.WriteLine( "   Values:" );38
 PrintValues( myBA3, 8 );
      PrintValues( myBA3, 8 );39

40
 Console.WriteLine( "myBA4" );
      Console.WriteLine( "myBA4" );41
 Console.WriteLine( "   Count:    {0}", myBA4.Count );
      Console.WriteLine( "   Count:    {0}", myBA4.Count );42
 Console.WriteLine( "   Length:   {0}", myBA4.Length );
      Console.WriteLine( "   Length:   {0}", myBA4.Length );43
 Console.WriteLine( "   Values:" );
      Console.WriteLine( "   Values:" );44
 PrintValues( myBA4, 8 );
      PrintValues( myBA4, 8 );45

46
 Console.WriteLine( "myBA5" );
      Console.WriteLine( "myBA5" );47
 Console.WriteLine( "   Count:    {0}", myBA5.Count );
      Console.WriteLine( "   Count:    {0}", myBA5.Count );48
 Console.WriteLine( "   Length:   {0}", myBA5.Length );
      Console.WriteLine( "   Length:   {0}", myBA5.Length );49
 Console.WriteLine( "   Values:" );
      Console.WriteLine( "   Values:" );50
 PrintValues( myBA5, 8 );
      PrintValues( myBA5, 8 );51
 }
   }52

53
 public static void PrintValues( IEnumerable myList, int myWidth )  {
   public static void PrintValues( IEnumerable myList, int myWidth )  {54
 int i = myWidth;
      int i = myWidth;55
 foreach ( Object obj in myList ) {
      foreach ( Object obj in myList ) {56
 if ( i <= 0 )  {
         if ( i <= 0 )  {57
 i = myWidth;
            i = myWidth;58
 Console.WriteLine();
            Console.WriteLine();59
 }
         }60
 i--;
         i--;61
 Console.Write( "{0,8}", obj );
         Console.Write( "{0,8}", obj );62
 }
      }63
 Console.WriteLine();
      Console.WriteLine();64
 }
   }65

66
 }
}67

68

69
 /*
/* 70
 This code produces the following output.
This code produces the following output.71

72
 myBA1
myBA173
 Count:    5
   Count:    574
 Length:   5
   Length:   575
 Values:
   Values:76
 False   False   False   False   False
   False   False   False   False   False77
 myBA2
myBA278
 Count:    5
   Count:    579
 Length:   5
   Length:   580
 Values:
   Values:81
 False   False   False   False   False
   False   False   False   False   False82
 myBA3
myBA383
 Count:    40
   Count:    4084
 Length:   40
   Length:   4085
 Values:
   Values:86
 True   False   False   False   False   False   False   False
    True   False   False   False   False   False   False   False87
 False    True   False   False   False   False   False   False
   False    True   False   False   False   False   False   False88
 True    True   False   False   False   False   False   False
    True    True   False   False   False   False   False   False89
 False   False    True   False   False   False   False   False
   False   False    True   False   False   False   False   False90
 True   False    True   False   False   False   False   False
    True   False    True   False   False   False   False   False91
 myBA4
myBA492
 Count:    5
   Count:    593
 Length:   5
   Length:   594
 Values:
   Values:95
 True   False    True    True   False
    True   False    True    True   False96
 myBA5
myBA597
 Count:    160
   Count:    16098
 Length:   160
   Length:   16099
 Values:
   Values:100
 False    True    True   False   False   False   False   False
   False    True    True   False   False   False   False   False101
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False102
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False103
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False104
 True    True    True   False   False   False   False   False
    True    True    True   False   False   False   False   False105
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False106
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False107
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False108
 False   False   False    True   False   False   False   False
   False   False   False    True   False   False   False   False109
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False110
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False111
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False112
 True   False   False    True   False   False   False   False
    True   False   False    True   False   False   False   False113
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False114
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False115
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False116
 False    True   False    True   False   False   False   False
   False    True   False    True   False   False   False   False117
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False118
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False119
 False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False120
 */
*/ 121

      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
 
                    
                     
                    
                 
                    
                 
 
        

 
    
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号