计算机安全基础
凯撒加密解密
上机实验报告
学院年级
专业班
学生姓名
学生学号
实验一凯撒加密解密
凯撒密码简介:恺撒密码的替换方法是通过排列明文和密文字母表,密文字母表示通过将
明文字母表向左或向右移动一个固定数目的位置。例如,当偏移量是左移3的时候(解密时
的密钥就是3):
明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文字母表:DEFGHIJKLMNOPQRSTUVWXYZABC
使用时,加密者查明文字母表中需要加密的消息中的每一个字母所在位置,并且写下密文字母表中对应的字母。需要解密的人则根据事先已知的密钥反过来操作,得到原来的明文。
例如:
明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG 密文:WKH TXLFN EURZQ IRA MXPSV RYHU WKH ODCB GRJ
源代码:
#include "kaisa.h"
using namespace std;
void Kaisa::setI()
{
cout << "\n请输入加密密码:";
cin >> i;
}
void Kaisa::jiami()
{
char a, b, c;
cout << "\n请输入明文:\t";
cin >> a;
b = char('z' - i%26);
c = char('Z' - i%26);
printf怎么加endl
cout << "\n密文是:\t";
while(a != '\n')
{
if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A'))
{ if((a <= b && a >= 'a') || ( a <= c && a >='A'))
cout << char(a + i%26);
if(a > c && a <= 'Z')
cout << char(a + i%26 - 26);
if(a > b && a <= 'z')
cout << char(a + i%26 - 26);
if(a == ' ')
cout << " ";
}
else
cout << a;
a = ();
}
cout << endl;
}
void Kaisa::setX()
{
cout << "\n请输入解密密码:";
cin >> i;
}
void Kaisa::jiemi()
{
char a, b, c;
cout << "\n请输入密文:\t";
cin >> a;
b = char('a' + i%26);
c = char('A' + i%26);
cout << "\n明文是:\t";
while(a != '\n')
{
if((a <= 'z' && a >= 'a') || ( a <= 'Z' && a >='A')) { if((a <= 'z' && a >= b) || ( a <= 'Z' && a >= c)) cout << char(a - i%26);
if(a >= 'a' && a < b)
cout << char(a - i%26 + 26);
if(a >= 'A' && a < c)
cout << char(a - i%26 + 26);
if(a == ' ')
cout << " ";
}
else
cout << a;
a = ();
}
cout << endl;
}
int main()
{
while(1)
{
int t;
cout << "1.加密" << endl
<< "2.解密" << endl
<<"按其他键退出"<<endl
<< "选择:";
cin >> t;
Kaisa kaisa;
if(t == 1)
{
kaisa.setI();
kaisa.jiami();
cout<<"加密完成\n"<<endl;
}
else if(t == 2)
{
kaisa.setX();
kaisa.jiemi();
cout<<"解密完成\n"<<endl;
}
else
return 0;
}
}
测试:密钥:4,明文:abcdefg 实验结果:
实验二DES加密解密
加密原理:DES 使用一个56 位的密钥以及附加的8 位奇偶校验位,产生最大64 位
的分组大小。这是一个迭代的分组密码,使用称为Feistel 的技术,其中将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES 使用16 个循环,使用异或,置换,代换,移位操作四种基本运算。
源代码:
#include<stdio.h>
#include<string.h>
#include"des_encode.h"
int key[16][48];
char str[8];
void main()
{
EncodeMain();
}
void EncodeMain()
{
int i;
char keychar[8];
int key2[8];
int strkey[8];
printf("请输入8个要加密的字符:\n");
for(i=0;i<8;i++)
scanf("%c",&str[i]);
getchar();
for(i=0;i<8;i++)
strkey[i]=str[i];
printf("\n输入明文的十六进制为:\n");
for(i=0;i<8;i++)
printf("%10x",strkey[i]);
printf("\n请输入密钥(8个字符):\n");
for(i=0;i<8;i++)
scanf("%c",&keychar[i]);
for(i=0;i<8;i++)
key2[i]=keychar[i];
getchar();
Encode(strkey,key2);
printf("\n加密后十六进制密文是:\n");
for(i=0;i<8;i++)
printf("%10x",strkey[i]);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。