信息安全实验一:DES分组密码算法 2019.03.21

实验一:DES分组密码算法

一、实验目的

理解、掌握DES分组密码算法流程。

二、实验内容

  1. 阅读、分析DES分组密码源程序。
  2. 调用DES分组密码源程序中的相关函数,完成8字节的明文加密成8字节的密文,并完成解密。
  3. 调用DES分组密码源程序中的相关函数,设计一个文件加密器,可以加密任意长度的文件,并密文文件可解密还原回原明文文件。

二、DES分组密码算法流程

 

 

四、实验过程

  1. 阅读、分析DES分组密码源程序。

 

 

工具函数:

ByteTobit将字节转换成二进制

BitToByte二进制转换成字节

Char8ToBit64 将长度为8的字符串转为二进制位串

Bit64ToChar8 将二进制位串转为长度为8的字符串

DES相关函数:

DES_MakeSubKeys 生成子密钥

DES_PC1_Transform 密钥置换1

DES_PC2_Transform 密钥置换2

DES_ROL循环左移

DES_IP_Transform IP置换

DES_IP_1_Transform IP逆置换

DES_E_Transform 扩展置换(E置换)

DES_P_Transform P置换

DES_XOR 异或

DES_SBOX S盒置换

DES_Swap 交换

DES_EncryptBlock 加密单个分组(8字节)

DES_DecryptBlock 解密单个分组(8字节)

DES_Encrypt 加密任意长度文件

DES_Decrypt 解密任意长度文件

  • 实验结果
  1. 调用DES分组密码源程序中的相关函数,完成8字节的明文加密成8字节的密文,并完成解密。

int main()

{

/*明文   加密后的密文   密钥   解密后的结果*/

ElemType  plainBlock[8],cipherBlock[8], keyBlock[8],resultBlock[8];

/*二进制流 子密钥*/

ElemType bKey[64],subKeys[16][48];

 

char *keyStr = "12345678";

/*  设置密钥因为keyStr是9位的,结尾多了\0   */

memcpy(keyBlock, keyStr, 8);

/*将密钥转换为二进制流*/

Char8ToBit64(keyBlock, bKey);

/*生成子密钥*/

DES_MakeSubKeys(bKey, subKeys);

 

//1、加密

char * text = "12345678";

memcpy(plainBlock, text, 8);

DES_EncryptBlock(plainBlock, subKeys, cipherBlock);

printf("加密完成\n");

for (int i = 0; i < 8; i++)

printf("%c", cipherBlock[i]);

printf("\n");

//2、解密

DES_DecryptBlock(cipherBlock, subKeys, resultBlock);

printf("解密完成\n");

for(int i=0;i<8;i++)

printf("%c", resultBlock[i]);

printf("\n");

getchar();

return 0;

 

}

五、实验结果:

输入的明文是"12345678"

 

注意:由于直接打印string的话,得遇到\0才会停止,会有多余的输出,所以这里使用了for循环只打印8个字符,密文长度和明文相同

 

 

  1. 调用DES分组密码源程序中的相关函数,设计一个文件加密器,可以加密任意长度的文件,并密文文件可解密还原回原明文文件。

int DES_Encrypt(char *plainFile, char *keyStr, char *cipherFile);

int DES_Decrypt(char *cipherFile, char *keyStr, char *plainFile);

int main()

{

//把1.txt文件的内容加密后放到2.txt里

//再把2.txt文件的内容解密,放到3.txt里

DES_Encrypt("1.txt", "12345678", "2.txt");

printf("加密完成\n");

DES_Decrypt("2.txt", "12345678", "3.txt");

printf("解密完成\n");

return 0;

}

 

 

1.txt文件 明文

1234567890123456789012345678901234567890

2.txt文件 密文

?躊克?谀9蟮?晕2_x0016__x0019_两~)懕?芻JubK/F氽D鍬逘&稟

3.txt文件 解密后的密文

1234567890123456789012345678901234567890

* 特别注意在这里我的UTF8编码的文本文档的开头三个字符为EF BB BF所以总字符为43个而不是40个

 

 
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值