密码表管理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
密码表管理系统
1设计目的、要求
(1) 可以存储用户名及密码等密码表信息
(2) 采用一种加密算法将密码表信息加密
(3) 可以添加、删除、修改已知密码表中的信息
(4) 可以检索密码信息
2设计原理
本程序采用维吉尼亚(vigenere)密码体制对用户名和密码等密码表信息进行加密。
3采用软件、设备
Microsoft Visual Studio 2010
4设计内容
1、vigenere cipher 的加密规则:
1)找到一个关键字作为密钥(本程序使用密码为关键字);
2)根据vigenere table 找出对应的密文。
2、vigenere cipher 的加密原理:
1)vigenere 代换表:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
BCDEFGHIJKLMNOPQRSTUVWXYZA
CDEFGHIJKLMNOPQRSTUVWXYZAB
DEFGHIJKLMNOPQRSTUVWXYZABC
EFGHIJKLMNOPQRSTUVWXYZABCD
FGHIJKLMNOPQRSTUVWXYZABCDE
GHIJKLMNOPQRSTUVWXYZABCDEF
HIJKLMNOPQRSTUVWXYZABCDEFG
IJKLMNOPQRSTUVWXYZABCDEFGH
JKLMNOPQRSTUVWXYZABCDEFGHI
KLMNOPQRSTUVWXYZABCDEFGHIJ
LMNOPQRSTUVWXYZABCDEFGHIJK
MNOPQRSTUVWXYZABCDEFGHIJKL
NOPQRSTUVWXYZABCDEFGHIJKLM
OPQRSTUVWXYZABCDEFGHIJKLMN
PQRSTUVWXYZABCDEFGHIJKLMNO
QRSTUVWXYZABCDEFGHIJKLMNOP
RSTUVWXYZABCDEFGHIJKLMNOPQ
STUVWXYZABCDEFGHIJKLMNOPQR
TUVWXYZABCDEFGHIJKLMNOPQRS
UVWXYZABCDEFGHIJKLMNOPQRST
VWXYZABCDEFGHIJKLMNOPQRSTU
WXYZABCDEFGHIJKLMNOPQRSTUV
XYZABCDEFGHIJKLMNOPQRSTUVW
YZABCDEFGHIJKLMNOPQRSTUVWX
ZABCDEFGHIJKLMNOPQRSTUVWXY
2)加密过程很简单,就是给定密钥字母x和明文字母y,密文字母是位于x行和y 列的那个字母。这样就决定了加密一条消息需要与消息一样长的密钥字符串。
(本程序较简单采用的密钥字符串与密码相同)
例:比如密钥词是deceptive,消息是“we are discovered save yourself”,那么
加密过程如下:
deceptivedeceptivedeceptive(密钥字符串)
wearediscoveredsaveyourself(消息)
ZICVTWQNGRZGVTWAVZHCQYGLMGJ(密文)
密文中的第一个字母“Z”是怎么得来的?从Vigenere代换表中,以密钥字符串
中的“d”为行,消息中的“w”为列的那个字母就是“Z”了。
3)本程序可以实现对用户名和密码等密码表信息的存储、添加、修改、删除。
程序代码:
#include
#include
#define MAX 100
static int square[27][27];
char * vigenere(char key[],char word[]);
int set(struct Admin admin[],char *name);
int landing(struct Admin admin[]);
int resultadd(struct Admin admin[]);
int resultres(struct Admin admin[]);
int Delete(struct Admin admin[]);
int update_m(struct Admin admin[]);
int Search_m(struct Admin admin[]);
using namespace std;
struct Admin{
char name[15];
char code[20];
};
int Count=0;//全局变量记录用户数
void main()
{
struct Admin admin[8];
int n=1,m;
char name[20];
for(int i=0;i { for(int j=0;j<15;j++) { admin[i].name[j]='\0'; } } for(int i=0;i { for(int j=0;j<20;j++) { admin[i].code[j]='\0'; } } while(n) { cout<<"\t\t****************************************\n"; cout<<"\t\t** 用户登录系统**\n"; cout<<"\t\t** **\n"; cout<<"\t\t** 1:建立**\n"; cout<<"\t\t** 2:登陆**\n"; cout<<"\t\t** 3:加密**\n"; cout<<"\t\t** 4:解密**\n"; cout<<"\t\t** 5.查找**\n"; cout<<"\t\t** 6:修改**\n"; cout<<"\t\t** 7:删除**\n"; cout<<"\t\t** 0:退出**\n"; cout<<"\t\t****************************************\n"; cout<<"\t\t请选择:"; cin>>m; switch(m) { case 1: set(admin,name);break; case 2: landing(admin); break; case 3: resultadd(admin);break; case 4: resultres(admin);break; case 5: Search_m(admin);break; case 6: update_m(admin);break; case 7: Delete(admin);break; case 0: n=0;break; } } }