开发环境: Windows + Vs2008/Vs2010
开发需求描述:
使用用户输入加密密钥(字符串必须大于8个字符) K1...Kn,对一指定的二进制内容B1B2....Bn进行加密运算,具体的加密过程分为如下几步:
1.分块,将输入的二进制内容(一般从文件中读入)块按照128位进行分块,这样我们得到块区S1S2...Sn,不足部分使用0来填补。
2.置换,按照一个简单的规则进行置换,即将128位组成一个封闭环,每个位跟比自己在位置上大16的那个位进行置换,临近末尾的位替换使用环形规则进位后进行替换,具体举例置换的位调换关系如下:
1 2 3 4 5 6 7 .... 125 126 127 128
17 18 19 20 21 22 23 .... 13 14 15 16
此轮置换进行6轮。
开发需求描述:
使用用户输入加密密钥(字符串必须大于8个字符) K1...Kn,对一指定的二进制内容B1B2....Bn进行加密运算,具体的加密过程分为如下几步:
1.分块,将输入的二进制内容(一般从文件中读入)块按照128位进行分块,这样我们得到块区S1S2...Sn,不足部分使用0来填补。
2.置换,按照一个简单的规则进行置换,即将128位组成一个封闭环,每个位跟比自己在位置上大16的那个位进行置换,临近末尾的位替换使用环形规则进位后进行替换,具体举例置换的位调换关系如下:
1 2 3 4 5 6 7 .... 125 126 127 128
17 18 19 20 21 22 23 .... 13 14 15 16
此轮置换进行6轮。
3.密钥异或,将输入密码K1累加一遍直接按照128位截断对齐,举例而言,如果用户输入了9个字符A1A2A3A4A5A6A7A8A9,使用了上述对齐截断后组合为A1A2A3A4A5A6A7A8A9A1A2A3A4A5A6A7,形成了密钥串后直接按照如下方式进行3轮异或计算:
第一轮密钥使用A1A2A3A4A5A6A7A8A9A1A2A3A4A5A6A7;
第二轮密钥使用A1A2A3A4A5A6A7A8A9A1A2A3A4A5A6A7环移了6位(环形移位,具体规则同第2步中的原文置换移位);
第三轮密钥使用A1A2A3A4A5A6A7A8A9A1A2A3A4A5A6A7环移了12位(环形移位,具体规则同第2步中的原文置换移位);
4.组合,将生成密文块区进行组合并且分块写到密文文件当中。
提交制品要求:
1. 请依照上述要求设计一个加密算法的DLL(windows),并且设计相应的加密与解密函数API。
2. 针对你设计的加密、解密API以及其他辅助函数,定义你自己的品质要求目标,撰写单体测试用例以实现你的品质控制目标;
3. 针对你的DLL以及API,请提供Sample供其他开发者调用(Console或者GUI程序供用户使用检测你的加密算法)。
4. 要求提交的制品能够在Vs开发环境中直接编译运行。