• 大小: 44KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: C/C++
  • 标签: DES  加解密  C++  

资源简介

本程序是用C++封装成的DES加解密应用程序,配合VC界面的整套源码。

资源截图

代码片段和文件信息

#include “stdafx.h“

#include “des.h“
#include “table.h“
#include 

void des::IP( Data64 &word )
{
ROR( word.a 4 );
ROR( word.b 3 );
ROR( word.c 2 );
ROR( word.d 1 );
ROL( word.e 1 );
ROL( word.f 2 );
ROL( word.g 3 );
ROL( word.h 4 );
}

void des::IP_1( Data64 &word )
{
ROR( word.h 4 );
ROR( word.g 3 );
ROR( word.f 2 );
ROR( word.e 1 );
ROL( word.d 1 );
ROL( word.c 2 );
ROL( word.b 3 );
ROL( word.a 4 );
}

void des::extend_R( Data32 &R Data48 &E_R )
{
E_R.a = R.d;
E_R.b = R.d;
E_R.c = R.c;
E_R.d = R.b;
E_R.e = R.a;
E_R.f = R.a;
}

void des::switch_key_lib( Data64 &k_lib )
{
unsigned char i;
unsigned char *p*p_cpy;
unsigned char temp;
unsigned char mn;
unsigned char cd;
Data64 k_lib_cpy;

k_lib.a = ( k_lib.b << 7 ) + ( k_lib.a & 0x7F );//去掉奇偶位
k_lib.b = ( k_lib.c << 6 ) + ( ( k_lib.b >> 1 ) & 0x3F );
k_lib.c = ( k_lib.d << 5 ) + ( ( k_lib.c >> 2 ) & 0x1F );
k_lib.d = ( k_lib.e << 4 ) + ( ( k_lib.d >> 3 ) & 0x0F );
k_lib.e = ( k_lib.f << 3 ) + ( ( k_lib.e >> 4 ) & 0x07 );
k_lib.f = ( k_lib.g << 2 ) + ( ( k_lib.f >> 5 ) & 0x03 );
k_lib.g = ( k_lib.h << 1 ) + ( ( k_lib.g >> 6 ) & 0x01 );
k_lib.h = 0;

k_lib_cpy = k_lib;

p = ( unsigned char * )&k_lib;
p_cpy = ( unsigned char * )&k_lib_cpy;


for( i = 0; i < 56; i++ )
{
m = position_table[ switch_k_table[ i ] - 1 ][ 0 ];//获得要换位所在的字符串的号码
n = position_table[ switch_k_table[ i ] - 1 ][ 1 ];//获得要换位所在字符串中的位置

c = position_table[ i ][ 0 ];
d = position_table[ i ][ 1 ];

temp = p_cpy[ m ] & and_table_get[ n ];//获得要换位的二进制位

if( n > d )
{
p[ c ] = ( p[ c ] & and_table_out[ d ] ) + ( temp >> ( n - d ) );//将要换位移到被换位所对应的位置
}
else
{
p[ c ] = ( p[ c ] & and_table_out[ d ] ) + ( temp << ( d - n ) );
}
}
}

void des::rotate_key_lib( Data64 &k_lib char i )
{
unsigned char temp1temp2;

    temp1 = k_lib.c >> ( 8 - i );
k_lib.c = ( k_lib.c << i ) + ( k_lib.b >> ( 8 - i ) );
k_lib.b = ( k_lib.b << i ) + ( k_lib.a >> ( 8 - i ) );
k_lib.a = ( k_lib.a << i ) + ( ( k_lib.d >> ( 4 - i ) ) & and_rotate_inside[ 0 ][ i - 1 ] );

temp2 = k_lib.e << ( 8 - i );
k_lib.e = ( k_lib.e >> i ) + ( k_lib.f << ( 8 - i ) );
k_lib.f = ( k_lib.f >> i ) + ( k_lib.g << ( 8 - i ) );
k_lib.g = ( k_lib.g >> i ) + ( ( k_lib.d << ( 4 - i ) ) & and_rotate_inside[ 1 ][ i - 1 ] );

k_lib.d = temp2 + ( ( k_lib.d >> i ) & and_rotate_inside[ 1 ][ i + 1 ] ) + ( ( k_lib.d << i ) & and_rotate_inside[ 0 ][ i + 1 ] ) + temp1;
}

void des::get_key_from_lib( Data48 &key Data64 &k_lib )//key为所求值,k_lib为未知值
{
/*key.a = k_lib.b;
key.b = k_lib.c;
key.c = k_lib.d;
key.d = k_lib.e;
key.e = k_lib.f;
key.f = k_lib.g;*/
char i;
unsigned char temp;
unsigned char mnab;
unsigned char *p_key*p_lib;

memset( &key 0 6 );//先将key清零

p_key = ( unsigned char * )&key;

p_lib = ( unsigned char * )&k_lib;
for( i = 0; i < 48; i++ )//按照密码选

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      11044  2009-03-09 14:27  EncryptDlg.cpp

     文件       1889  2009-03-02 10:49  EncryptDlg.h

     文件       3597  2009-02-27 08:45  ReadMe.txt

     文件       1560  2009-02-28 09:57  resource.h

     文件        209  2009-02-27 08:45  StdAfx.cpp

     文件       1054  2009-02-27 08:45  StdAfx.h

     文件       4400  2009-02-21 15:54  table.h

     文件       1078  2009-02-27 08:45  res\Encrypt.ico

     文件        399  2009-02-27 08:45  res\Encrypt.rc2

     文件        437  2009-02-21 15:02  data.h

     文件       7209  2009-03-02 10:32  des.cpp

     文件        650  2009-02-28 12:04  des.h

     文件       7068  2009-03-02 10:44  des_1.cpp

     文件        630  2009-02-28 09:32  des_1.h

     文件      21380  2009-03-09 14:11  Encrypt.aps

     文件       1649  2009-08-24 10:38  Encrypt.clw

     文件       2077  2009-02-27 08:45  Encrypt.cpp

     文件       3342  2009-08-24 10:39  Encrypt.dsp

     文件        537  2009-02-27 08:45  Encrypt.dsw

     文件       1335  2009-02-27 08:45  Encrypt.h

     文件     123904  2009-08-24 10:39  Encrypt.ncb

     文件      50688  2009-08-24 10:39  Encrypt.opt

     文件       1888  2009-08-24 10:39  Encrypt.plg

     文件       5769  2009-03-02 10:49  Encrypt.rc

     目录          0  2009-03-02 16:30  res

----------- ---------  ---------- -----  ----

               253793                    25


评论

共有 条评论