云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 哈工大威海 电子商务实验报告

哈工大威海 电子商务实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/6/28 12:47:16

}

//循环左移

int DES_ROL(ElemType data[56], int time){ ElemType temp[56];

//保存将要循环移动到右边的位 memcpy(temp,data,time);

memcpy(temp+time,data+28,time);

//前28位移动

memcpy(data,data+time,28-time); memcpy(data+28-time,temp,time);

//后28位移动

memcpy(data+28,data+28+time,28-time); memcpy(data+56-time,temp+time,time);

return 0; }

//IP置换

//转换完成后,将转换后的结果重新赋值给data int DES_IP_Transform(ElemType data[64]){ int cnt;

ElemType temp[64];

for(cnt = 0; cnt < 64; cnt++){

temp[cnt] = data[IP_Table[cnt]]; }

memcpy(data,temp,64); return 0; }

//IP逆置换

//转换完成后,将转换后的结果重新赋值给data int DES_IP_1_Transform(ElemType data[64]){ int cnt;

ElemType temp[64];

for(cnt = 0; cnt < 64; cnt++){

temp[cnt] = data[IP_1_Table[cnt]]; }

memcpy(data,temp,64); return 0; }

//扩展置换

//将右32位转换为48位,位

int DES_E_Transform(ElemType data[48]){ int cnt;

ElemType temp[48];

for(cnt = 0; cnt < 48; cnt++){

temp[cnt] = data[E_Table[cnt]]; }

memcpy(data,temp,48); return 0; }

//P置换

//P盒的置换操作

int DES_P_Transform(ElemType data[32]){ int cnt;

ElemType temp[32];

for(cnt = 0; cnt < 32; cnt++){

temp[cnt] = data[P_Table[cnt]]; }

memcpy(data,temp,32); return 0; }

//异或

int DES_XOR(ElemType R[48], ElemType L[48] ,int count){ int cnt;

for(cnt = 0; cnt < count; cnt++){ R[cnt] ^= L[cnt]; }

return 0; }

//S盒置换 每一轮均使用一次这8个S盒 //每六位使用一个S盒,一共使用8个S盒 int DES_SBOX(ElemType data[48]){ int cnt;

int line,row,output; int cur1,cur2;

for(cnt = 0; cnt < 8; cnt++){ cur1 = cnt*6; cur2 = cnt<<2;

//计算在S盒中的行与列

line = (data[cur1]<<1) + data[cur1+5];

row = (data[cur1+1]<<3) + (data[cur1+2]<<2) + (data[cur1+3]<<1) + data[cur1+4]; output = S[cnt][line][row];

//化为2进制

data[cur2] = (output&0X08)>>3; data[cur2+1] = (output&0X04)>>2; data[cur2+2] = (output&0X02)>>1; data[cur2+3] = output&0x01; }

return 0; }

//交换

int DES_Swap(ElemType left[32], ElemType right[32]){ ElemType temp[32];

memcpy(temp,left,32); memcpy(left,right,32); memcpy(right,temp,32); return 0; }

//加密单个分组

int DES_EncryptBlock(ElemType plainBlock[8], ElemType subKeys[16][48], ElemType cipherBlock[8]){ ElemType plainBits[64]; ElemType copyRight[48]; int cnt;

Char8ToBit64(plainBlock,plainBits); //初始置换(IP置换)

DES_IP_Transform(plainBits);

//16轮迭代

for(cnt = 0; cnt < 16; cnt++){ memcpy(copyRight,plainBits+32,32);

DES_E_Transform(copyRight); //将右半部分进行扩展置换,从32位扩展到48位

DES_XOR(copyRight,subKeys[cnt],48); //将右半部分与子密钥进行异或操作

DES_SBOX(copyRight); //异或结果进入S盒,输出32位结果

DES_P_Transform(copyRight); //将明文左半部分与右半部分进行异或

DES_XOR(plainBits,copyRight,32); if(cnt != 15){

//最终完成左右部的交换

DES_Swap(plainBits,plainBits+32); } }

//逆初始置换(IP^1置换)

DES_IP_1_Transform(plainBits);

Bit64ToChar8(plainBits,cipherBlock); return 0; }

//解密单个分组 即每次加密64位

int DES_DecryptBlock(ElemType cipherBlock[8], ElemType subKeys[16][48],ElemType plainBlock[8]){ ElemType cipherBits[64]; //用于存储每次加密的8个字节转换成的64位 ElemType copyRight[48]; int cnt;

Char8ToBit64(cipherBlock,cipherBits); //初始置换(IP置换)

DES_IP_Transform(cipherBits); //16轮迭代

for(cnt = 15; cnt >= 0; cnt--){ memcpy(copyRight,cipherBits+32,32);

//将右半部分进行扩展置换,从32位扩展到48位 DES_E_Transform(copyRight);

//将右半部分与子密钥进行异或操作

DES_XOR(copyRight,subKeys[cnt],48); //异或结果进入S盒,输出32位结果 DES_SBOX(copyRight); //P置换

DES_P_Transform(copyRight); //将明文左半部分与右半部分进行异或 DES_XOR(cipherBits,copyRight,32); if(cnt != 0){

//最终完成左右部的交换

DES_Swap(cipherBits,cipherBits+32); } }

//逆初始置换(IP^1置换)

DES_IP_1_Transform(cipherBits);

Bit64ToChar8(cipherBits,plainBlock); return 0; }

//加密文件

int DES_Encrypt(char *plainFile, char *keyStr,char *cipherFile){ FILE *plain,*cipher; int count;

ElemType plainBlock[8],cipherBlock[8],keyBlock[8]; ElemType bKey[64];

ElemType subKeys[16][48];

if((plain = fopen(plainFile,\ return PLAIN_FILE_OPEN_ERROR; }

if((cipher = fopen(cipherFile,\ return CIPHER_FILE_OPEN_ERROR; }

//设置密钥

memcpy(keyBlock,keyStr,8); //将密钥转换为二进制流

Char8ToBit64(keyBlock,bKey); //生成子密钥

DES_MakeSubKeys(bKey,subKeys); while(!feof(plain)) {

//每次读8个字节,并返回成功读取的字节数

if((count = fread(plainBlock,sizeof(char),8,plain)) == 8) {

DES_EncryptBlock(plainBlock,subKeys,cipherBlock); fwrite(cipherBlock,sizeof(char),8,cipher); } }

搜索更多关于: 哈工大威海 电子商务实验报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

} //循环左移 int DES_ROL(ElemType data[56], int time){ ElemType temp[56]; //保存将要循环移动到右边的位 memcpy(temp,data,time); memcpy(temp+time,data+28,time); //前28位移动 memcpy(data,data+time,28-time); memcpy(data+28-time,temp,time); //后28位移动 memcpy(data+28,data+28+time,28-time);

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com