当前位置:文档之家› 密码表管理

密码表管理

密码表管理
密码表管理

密码表管理系统

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;

}

}

}

//建立用户

int set(struct Admin admin[],char *name)

{

int i=0;

int c;

cout<<"\t\t输入用户名:";

cin>>admin[Count].name;

cout<

Count-=1-Count++;

c=getch();

while(c != '\r') //回车

{

if(i >= 0)

{

if (c == '\b')

{

cout<<"\b \b";//\b只是退回一格,不清除的。所以第一次\b退回后用空格覆盖。然后再\b退回

i = i - 1;

}

else

{

cout<<"*";

admin[Count].code[i] = c;

}

}

c = getch();

if(c != '\b')

i=i+1;

}

admin[Count].code[i] = '\0';

cout<

return 0;

}

//用户登录

int landing(struct Admin admin[])

{

char Name[20],Code[20];

int p=0,i=0,c,m=0;

cout<

cin>>Name;

cout<

c=getch();

while(c != '\r') //回车

{

if(i >= 0)

{

if (c == '\b')

{

cout<<"\b \b";//\b只是退回一格,不清除的。所以第一次\b退回后用空格覆盖。然后再\b退回

i = i - 1;

}

else

{

cout<<"*";

Code[i] = c;

}

}

c = getch();

if(c != '\b')

i=i+1;

}

Code[i] = '\0';

for(int n=0;n<9;n++)

{

if(strcmp(Name,admin[n].name)==0&&strcmp(Code,admin[n].code)==0)

{

cout<<"\n\t\t登陆成功!\n";

p=1;

}

}

if(p!=1) //判断登录失败原因

{

for(m;m<9;m++)

{

if(strcmp(Name,admin[m].name)==0)

{

cout<<"\t\t密码错误!\n";

return 0;

}

}

cout<<"\t\t用户不存在!\n";

}

return 0;

}

/*加密算法*/

char * vigenere(char key[],char word[]){

char *text=(char *)malloc(MAX*sizeof(char));

int key_length=strlen(key);

int word_length=strlen(word);

int i,j,c;

for(i=0;i

if((word[i]>=65&&word[i]<=90)||(word[i]>=97&&word[i]<=122)){ if(word[i]>=97&&word[i]<=122){

c=word[i]-96;

}

else {

c=word[i]-64;

}

j=i%key_length;

text[i]=square[key[j]-96][c];

}

else text[i]=word[i];

}

text[i]='\0';

return text;

}

/*解密算法*/

char * anti_vigenere(char key[],char * en_word){

char *word=(char *)malloc(MAX*sizeof(char));

int key_length=strlen(key);

int word_length=strlen(en_word);

int i,j,c,k,d;

for(i=0;i

if(en_word[i]>=65&&en_word[i]<=90){

c=i%key_length;/*所用密钥在所在*/

k=key[c]-96;

d=en_word[i]-square[k][1];

if(d>=0){

word[i]='a'+d;

}else{

word[i]='z'+d+1;

}

}else{

word[i]=en_word[i];

}

}

word[i]='\0';

return word;

}

//加密结果

int resultadd(struct Admin admin[])

{

char key[20],*en_word;

int i,j,k,m;

for(i=1;i<27;i++){

for(j=1;j<27;j++){

square[i][j]=63+i+j;

if(square[i][j]>90)

square[i][j]=square[i][j]-26;

}

}

for(k=1;k<27;k++){

for(m=1;m<27;m++){

cout<<(char)square[k][m]<<" ";

}

cout<<"\n"<

}

for(i=0;i<=Count;i++)

{

for(int s=0;s<20;s++)

{

key[s]=admin[i].code[s];

}

en_word=vigenere(key,admin[i].code);

cout<<"\n"<<"The result is: "<<"\n"<

}

return 0;

}

//解密结果

int resultres(struct Admin admin[])

{

char key[20],*en_word;

int i,j,k,m;

for(i=1;i<27;i++){

for(j=1;j<27;j++){

square[i][j]=63+i+j;

if(square[i][j]>90)

square[i][j]=square[i][j]-26;

}

}

for(k=1;k<27;k++){

for(m=1;m<27;m++){

cout<<(char)square[k][m]<<" ";

}

cout<<"\n"<

}

for(i=0;i<=Count;i++)

{

for(int s=0;s<20;s++)

{

key[s]=admin[i].code[s];

}

en_word=anti_vigenere(key,admin[i].code);

cout<<"\n"<<"The result is: "<<"\n"<

}

return 0;

}

//查找用户秘密

int Search_m(struct Admin admin[])

{

char sename[15];

bool flag;

cout<<"请输入要查找的用户名"<

cin>>sename;

while(Count>=0)

{

for(int i=0;i<15;i++)

{

if(sename[i]==admin[Count].name[i])

flag=true;

else flag=false;

}

Count--;

}

if(flag)

{

for(int i=0;i<20;i++)

cout<

cout<

cout<<"查找用户密码成功!!!"<

}

else cout<<"用户名错误,请重新选择操作!!!"<

return 0;

}

//修改用户密码

int update_m(struct Admin admin[])

{

char oldname[15];

char newpassword[20];

bool flag;

cout<<"请输入要修改密码的用户名!!!"<

cin>>oldname;

while(Count>=0)

{

for(int i=0;i<15;i++)

{

if(oldname[i]==admin[Count].name[i])

flag=true;

else flag=false;

}

Count--;

}

if(flag)

{

cout<<"请输入新的密码!!!"<

cin>>newpassword;

for(int j=0;j<20;j++)

{

admin[Count+1].code[j]=newpassword[j];

}

cout<<"修改用户成功!!!"<

}

else cout<<"用户名错误,请重新选择操作!!!"<

return 0;

}

//删除用户

int Delete(struct Admin admin[])

{

char oldname[15];

bool flag;

cout<<"请输入要删除的用户名!!!"<

cin>>oldname;

while(Count>=0)

{

for(int i=0;i<15;i++)

{

if(oldname[i]==admin[Count].name[i])

flag=true;

else flag=false;

}

Count--;

}

if(flag)

{

for(int j=0;j<20;j++)

{

admin[Count+1].code[j]='\0';

}

for(int k=0;k<15;k++)

{

admin[Count+1].name[k]='\0';

}

cout<<"删除成功"<

}

else cout<<"用户名错误,请重新选择操作!!!"<

return 0;

}

相关主题
文本预览
相关文档 最新文档