DES加密演算法

2021-06-22 10:26:34 字數 2934 閱讀 7238

#include

#include

#include

#include

using namespace std;

const static char ip_table[64] =//初始置換

;const static char ipr_table[64] =  

//初始逆置換表

;static const char extension_table[48]=  

//擴充套件置換表

;const static char p_table[32]=  

//p盒置換表

;const static char pck_table[56] =//金鑰置換(原64位去掉奇偶校驗位後)

;const static char loop_table[16] =//左移

;const static char pcc_table[48] =//壓縮置換表

;const static char s_box[8][4][16] =//8個s盒,,

,},,,

,},,,

,},,,

,}, 

,,,},

,,,},

,,,},

,,,}

};typedef bool (*psubkey)[16][48];

enum;

static bool subkey[2][16][48];

static bool is3des;

static char tmp[256],deskey[16];

static void setkey(const char  

*key,int len);

static void setsubkey(psubkey psubkey,const char key[8]);

static void f_func(bool in[32],const bool ki[48]);

static void s_func(bool out[32],const bool in[48]);

static void transform(bool *out[32],const bool in[48],int len);

static void xor(bool *ina,const bool *inb,int len);

static void rotatel(bool *in,int len,int loop);

static void bytetobit(bool *out,const char *in,int bits);

static void bittobyte(char *out,const bool *in,int bits);

static void mydes(char out[8],char in[8],const psubkey psubkey,bool type);

bool des_act(char *out,char *in,long datalen,const char *key,int keylen,bool type);

void main()

;char plain_text=" welcome to des world! it is wonderful!";

char encrypt_text[255];

char decrypt_text[255];

memset(encrypt_text,0,sizeof(encrypt_text));

memset(decrypt_text,0,sizeof(decrypt_text));

printf("\ndes加密前的明文:\n");

printf("%s\n\n",plain_text);

des_act(encrypt_text,plain_text,sizeof(plain_text),key,sizeof(key),encrypt);

printf("\ndes加密後的密文:\n");

printf("%s\n\n",encrypt_text);

des_act(decrypt_text,encrypt_text,sizeof(plain_text),key,sizeof(key),decrypt);

printf("\n解密後的輸出:\n");

printf("%s\n",decrypt_text);

}void bytetobit(bool *out,const char *in,int bits)

void bittobyte(char *out,const bool *in,int bits)

void transform(bool *out,bool *in,const char *table,int len)

void xor(bool *ina,const bool *inb,int len)

void rotatel(bool *in,int len,int loop)

void s_func(bool out[32],const bool in[48])

}void f_func(bool in[32],const bool ki[48])

void setsubkey(psubkey psubkey,const char key[8])

}void setkey(const char  

*key,int len)

void des(char out[8],char in[8],const psubkey psubkey,bool type)

}else 

}transform(m,m,ipr_table,64);

bittobyte(out,m,64);

}bool des_act(char *out,char *in,long datalen,const char *key,int keylen,bool type)

else 

}return true;

}

DES加密演算法

命名空間 system.security.cryptography 定義訪問資料加密標準 des 演算法的加密服務提供程式 csp 版本的包裝物件。無法繼承此類。測試1加密頁面 protected void page load object sender,eventargs e response.r...

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...

加密演算法之DES演算法

一 des演算法 美國國家標準局1973年開始研究除國防部外的其它部門的計算機系統的資料加密標準,於1973年5月15日和1974年8月27日先後兩次向公眾發出了徵求加密演算法的公告。加密演算法要達到的目的 通常稱為des 密碼演算法要求 主要為以下四點 提供高質量的資料保護,防止資料未經授權的洩露...