Example #1
0
        // inData, outData ¶¼Îª 8 Bytes£¬·ñÔò³ö´í
        void desData(TDesMode desMode, byte[] inData, byte[] outData)
        {
            int i, j;
            byte[] temp = new byte[4];
            byte[] buf = new byte[4];

            for (i = 0; i < 8; i++) outData[i] = inData[i];
            initPermutation(outData);
            if (desMode == TDesMode.dmEncry)
            {
                for (i = 0; i < 16; i++)
                {
                    for (j = 0; j < 4; j++) temp[j] = outData[j];                     //temp = Ln
                    for (j = 0; j < 4; j++) outData[j] = outData[j + 4];                //Ln+1 = Rn
                    encry(outData, SubKey[i], buf);                                   //Rn ==Kn==> buf
                    for (j = 0; j < 4; j++) outData[j + 4] = (byte)(temp[j] ^ buf[j]);  //Rn+1 = Ln^buf
                };
                for (j = 0; j < 4; j++) temp[j] = outData[j + 4];
                for (j = 0; j < 4; j++) outData[j + 4] = outData[j];
                for (j = 0; j < 4; j++) outData[j] = temp[j];
            }
            else if (desMode == TDesMode.dmDecry)
            {
                for (i = 15; i >= 0; i--)
                {
                    for (j = 0; j < 4; j++) temp[j] = outData[j];
                    for (j = 0; j < 4; j++) outData[j] = outData[j + 4];
                    encry(outData, SubKey[i], buf);
                    for (j = 0; j < 4; j++) outData[j + 4] = (byte)(temp[j] ^ buf[j]);
                };
                for (j = 0; j < 4; j++) temp[j] = outData[j + 4];
                for (j = 0; j < 4; j++) outData[j + 4] = outData[j];
                for (j = 0; j < 4; j++) outData[j] = temp[j];
            };
            conversePermutation(outData);
        }
Example #2
0
        private void desData(TDesMode desMode, byte[] inData, ref byte[] outData)
        {
            int i, j;

            byte[] temp = new byte[4];
            byte[] buf  = new byte[4];
            for (i = 0; i < 8; i++)
            {
                outData[i] = inData[i];
            }
            this.initPermutation(ref outData);
            if (desMode == TDesMode.dmEncry)
            {
                for (i = 0; i < 16; i++)
                {
                    for (j = 0; j < 4; j++)
                    {
                        temp[j] = outData[j];
                    }
                    for (j = 0; j < 4; j++)
                    {
                        outData[j] = outData[j + 4];
                    }
                    this.encry(outData, subKey[i], ref buf);
                    for (j = 0; j < 4; j++)
                    {
                        outData[j + 4] = (byte)(temp[j] ^ buf[j]);
                    }
                }

                for (j = 0; j < 4; j++)
                {
                    temp[j] = outData[j + 4];
                }
                for (j = 0; j < 4; j++)
                {
                    outData[j + 4] = outData[j];
                }
                for (j = 0; j < 4; j++)
                {
                    outData[j] = temp[j];
                }
            }
            else if (desMode == TDesMode.dmDecry)
            {
                for (i = 15; i >= 0; i--)
                {
                    for (j = 0; j < 4; j++)
                    {
                        temp[j] = outData[j];
                    }
                    for (j = 0; j < 4; j++)
                    {
                        outData[j] = outData[j + 4];
                    }
                    this.encry(outData, subKey[i], ref buf);
                    for (j = 0; j < 4; j++)
                    {
                        outData[j + 4] = (byte)(temp[j] ^ buf[j]);
                    }
                }

                for (j = 0; j < 4; j++)
                {
                    temp[j] = outData[j + 4];
                }
                for (j = 0; j < 4; j++)
                {
                    outData[j + 4] = outData[j];
                }
                for (j = 0; j < 4; j++)
                {
                    outData[j] = temp[j];
                }
            }
            this.conversePermutation(ref outData);
        }
Example #3
0
 /// <summary>
 /// inData, outData 都为8Bytes,否则出错
 /// </summary>
 /// <param name="desMode"></param>
 /// <param name="inData"></param>
 /// <param name="outData"></param>
 static void desData(TDesMode desMode, byte[] inData, ref byte[] outData)
 {
     byte[] temp = new byte[4];
     byte[] buf  = new byte[4];
     for (int i = 0; i < 8; i++)
     {
         outData[i] = inData[i];
     }
     initPermutation(ref outData);
     if (desMode == TDesMode.dmEncry)
     {
         for (int i = 0; i < 16; i++)
         {
             for (int j = 0; j < 4; j++)
             {
                 temp[j] = outData[j];                 //temp = Ln
             }
             for (int j = 0; j < 4; j++)
             {
                 outData[j] = outData[j + 4];           //Ln+1 = Rn
             }
             encry(outData, subKey[i], ref buf);        //Rn ==Kn==> buf   //subKey[i]
             for (int j = 0; j < 4; j++)
             {
                 outData[j + 4] = (byte)(temp[j] ^ buf[j]);  //Rn+1 = Ln^buf
             }
         }
         for (int j = 0; j < 4; j++)
         {
             temp[j] = outData[j + 4];
         }
         for (int j = 0; j < 4; j++)
         {
             outData[j + 4] = outData[j];
         }
         for (int j = 0; j < 4; j++)
         {
             outData[j] = temp[j];
         }
     }
     else if (desMode == TDesMode.dmDecry)
     {
         for (int i = 15; i >= 0; i--)
         {
             for (int j = 0; j < 4; j++)
             {
                 temp[j] = outData[j];
             }
             for (int j = 0; j < 4; j++)
             {
                 outData[j] = outData[j + 4];
             }
             encry(outData, subKey[i], ref buf);
             for (int j = 0; j < 4; j++)
             {
                 outData[j + 4] = (byte)(temp[j] ^ buf[j]);
             }
         }
         for (int j = 0; j < 4; j++)
         {
             temp[j] = outData[j + 4];
         }
         for (int j = 0; j < 4; j++)
         {
             outData[j + 4] = outData[j];
         }
         for (int j = 0; j < 4; j++)
         {
             outData[j] = temp[j];
         }
     }
     conversePermutation(ref outData);
 }
Example #4
0
    private void desData(TDesMode desMode, byte[] inData, byte[] outData)
    {
        byte[] temp = new byte[4];
        byte[] buf  = new byte[4];
        for (int i = 0; i < 8; i++)
        {
            outData[i] = inData[i];
        }
        this.initPermutation(outData);
        bool flag = desMode == TDesMode.dmEncry;

        if (flag)
        {
            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    temp[j] = outData[j];
                }
                for (int j = 0; j < 4; j++)
                {
                    outData[j] = outData[j + 4];
                }
                this.encry(outData, this.SubKey[i], buf);
                for (int j = 0; j < 4; j++)
                {
                    outData[j + 4] = (byte)(temp[j] ^ buf[j]);
                }
            }
            for (int j = 0; j < 4; j++)
            {
                temp[j] = outData[j + 4];
            }
            for (int j = 0; j < 4; j++)
            {
                outData[j + 4] = outData[j];
            }
            for (int j = 0; j < 4; j++)
            {
                outData[j] = temp[j];
            }
        }
        else
        {
            bool flag2 = desMode == TDesMode.dmDecry;
            if (flag2)
            {
                for (int i = 15; i >= 0; i--)
                {
                    for (int j = 0; j < 4; j++)
                    {
                        temp[j] = outData[j];
                    }
                    for (int j = 0; j < 4; j++)
                    {
                        outData[j] = outData[j + 4];
                    }
                    this.encry(outData, this.SubKey[i], buf);
                    for (int j = 0; j < 4; j++)
                    {
                        outData[j + 4] = (byte)(temp[j] ^ buf[j]);
                    }
                }
                for (int j = 0; j < 4; j++)
                {
                    temp[j] = outData[j + 4];
                }
                for (int j = 0; j < 4; j++)
                {
                    outData[j + 4] = outData[j];
                }
                for (int j = 0; j < 4; j++)
                {
                    outData[j] = temp[j];
                }
            }
        }
        this.conversePermutation(outData);
    }