信息加密与信息摘要
1 古典密码学
1.1 信息传递过程中可能遇到的问题
(1)被动攻击
- 截获
(2)主动攻击
- 中断
- 篡改
- 伪造
1.2 何谓“加密”
(1)“密码”或“加密系统”用于“加密数据”
(2)对于原始数据的未加密的数据,我们称之为“明文”
(3)对于加密的结果,我们称之为“密文”。
(4)通过称为“解密”的过程,我们把密文恢复成原始的明文。
1.3 古典密码学思想
(1)替换思想
- 凯撒密码:消息的加密是通过将当前字母替换为在常规字母表中第n个位置之后的那个字母来完成的。
(2)换位思想 - 换位密码保持所有字母数量不变,只改变字母的排列,一般是将明文写在一个给定大小的矩阵中,然后对行和列依据特定的序列进行置换操作。
- 优点: 明文的统计信息完全分散在了密文中,对于“基于明文消息中所包含的统计信息的攻击行为"具备一定的抵抗力。
- 这种将明文的统计特性扩散并湮没在整个密文中的思路一直沿用到现代。
1.4 理想的加密系统
- 过去的明文和密文攻击者可以知道
- 加密和解密的算法对方可以知道
- 只要密钥不泄露,对方就无法破解新的密文
- 可以公开除了密钥之外的整个密码系统的一切内容
1.5 古典加密举例
- 培根密码
- 猪圈密码
- 跳舞的小人
- 摩斯电码
- 当铺密码
- 键盘密码
- 与佛论禅
2 古典密码学破解练习
2.1 密文“yvccfnficu”的解密结果是
#include "stdio.h"
#include "conio.h"
int main()
{
int k,i=0;
char a[100],b[100]={
0},c[100]={
0};
/*
printf("请输入明文(小写字母):\n");
gets(a);
printf("请输入加密密钥(1-25):\n");
scanf("%d",&k);
do{
if((a[i]+k)>122)
b[i]=(char)(a[i]+k-26);
else
b[i]=(char)(a[i]+k);
i++;
}while(a[i]!='\0');
printf("密文为:\n");
puts(b);
*/