古典加密实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
古典密码算法
一、实验目的
学习常见的古典密码学算法,通过编程实现替代密码算法和置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。
二、实验要求
分析替代密码算法和置换密码算法的功能需求,详细设计实现替代密码算法和置换密码算法的数据结构和流程,给出测试用例和测试步骤,得出测试和结论。替代密码算法和置换密码算法的实现程序必须提供加密和解密两个接口:int encrypt()和int decrypt()。当加密或者解密成功时返回CRYPT_OK,失败时返回CRYPT_ERROR。
三、实验原理
古典密码算法曾被广泛应用,大都比较简单,使用手工和机械操作来实现加密和解密。它的主要应用对象是文字信息,利用密码算法实现文字信息的加密和解密。下面介绍两种算法:替代密码和置换密码。
1.替代密码的原理是使用替代法进行加密,就是将明文由其它的字母、数字或符合所代替后形成密文。这里每个明文字母对应的密文字母可能是一个,也可能是多个。接收者对密文进行逆向替换即可得到明文。
2.置换密码算法的原理是不改变明文字符,而是按照某一规则重新排列消息中的比特或字符顺序,才而实现明文信息的加密。置换密码有时又称为换位密码。
我实验过程中替代密码是单表替换,用字母的下一个字母代替:for(j = 0; j < i; j++)
{
if(96 < Mingwen[j]&&Mingwen[j] < 123)
{
Miwen[j] = 'a' + (Mingwen[j] - 'a' + 1) % 26;
}
else
{
Miwen[j] = 'A' + (Mingwen[j] - 'A' + 1) % 26;
}
}
置换加密主要是对密钥进行整理,还有就是动态分配二维数组,将明文和密文填充置的过程,换密码关键代码如下:
for(a = 0; a < k; a++)
{
for(b = 0; b < hang; b++)
{
Miwen[i] = p[b][ord[j]];
i++;
}
j++;
}
for(a = 0; a < 26; a++)
{
for(b = 0; b < k; b++)
{
if(key1[b] == alphatable[a])
{
ord[b] = ind++;
}
}
}
具体加密见下图:
详细加密代码见附件。
四、实验总结
本次实验主要让我了解了古典加密算法的具体过程,而且也对自己的编程有了一定程度的温习,实验过程出现过多次问题,置换加密我一开始弄错了,以为是简单的按照密钥字母顺序进行排序,后来才知道是置换;解密的过程中二维数组常出现数据丢失,经常多次debug 才发现是循环逻辑出错。错误一点点改过后,终于成功了,看来自己还要加强编程的联系,当然更要理解所要编写的内容,总而言之,这次实习收获很大!