作业四 DES 加密解密算法
经过这次实验我熟悉了 DES 加密的过程,也了解了神秘的 S 盒在 DES 加密中
的重要作用。
刚开始的时候看到一些软件能把文本进行 DES 加密,想用 matlab 把字符串
转成二进制进行加密,后来认为不妥,因为有一部分 64bits 数据是不能用字符串
表示的,最终确定 64bits 的数据和密钥都是 64bits 的数字,使用 16 进制表示,
这样就能验证任何二进制数的雪崩效应了。
发现 matlab 中不能使用 hex2bin 直接转换,于是使用了 hex2dec 和 dec2bin
两步转换,不够 4 个字节时会使数组长度不够,如 1 就是 1,只有 1 列,于是在
前面补了 3 个 0。数字很大时虽然会大于 4 位,只取低 4 位就不会有问题。实验
代码及结果如下。
主函数:
%D='0000000000000000';
D='8000000000000000';
K='014B24621C181C32';
% 1.将十六进制数初始化为二进制数组方便 DES 加解密
[Di, Ki] = datainit(D,K);
% 2.Di Ki 就是加解密使用的数据和密钥
% 开始 DES 加密:
% 2.0 根据密钥 Ki 生成子密钥 Ksub:
[Ksub] = gen_subkey(Ki);
% 2.1 对数据 Di 根据子密钥进行 16 轮加密处理生成 De
De = process_16cycles(Ksub, Di, 1);
% 2.2 对 De 进行末置换得到最终的密文:
De = FIP(De);
% 3. 使用密文 De 和密钥 K 解密生成解密后的原始数据 Dd