| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1687 人关注过本帖
标题:[原创]密码管理器源代码
取消只看楼主 加入收藏
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[原创]密码管理器源代码

/*SK-CHINA 密码管理器 0.0.1 BY S.K*/
/*写于2007.2.16 晚上 于家中 */
#include<stdio.h>
#include<conio.h>
#include<string.h>

/*二进制数据文件结构*/
typedef struct {
char name[30];
char password[30];
} password;

int main(void) {
int i;
password s[100];
unsigned char num=0;
FILE *input,*output;

printf("正在装入数据...");
if((input=fopen("data","rb"))!=NULL) {
fread(&num,sizeof(unsigned char),1,input);
for(i=0;i<num;i++)
fread(&s[i],sizeof(password),1,input);
fclose(input);
printf("\r数据装入完毕\n");
} else {
printf("\r无法找到已有的数据,程序将新建一个文件\n");
output=fopen("data","wb");
fwrite(&num,sizeof(unsigned char),1,output);
fclose(output);
}
while(1) {
char c;
char a[30];
int t;
printf("--------------------------------\n");
printf("SK-CHINA 密码管理器 0.0.1 BY S.K\n");
printf("--------------------------------\n");
printf("A:添加数据 C:更改数据 D:删除数据\n");
printf("F:查找数据 S:显示数据 E:保存退出\n");
printf("请输入你希望的操作:");
scanf("%c",&c);
clrscr();
switch(c) {
case 'A': { printf("请输入密码名:");
scanf("%s",s[num].name);
printf("请输入密码:");
scanf("%s",s[num].password);
num++;
break;
}
case 'F': { printf("请选择查找数据的方式:\n");
printf("1.密码记录号 2.密码名 --->");
scanf("%d",&t);
switch(t) {
case 1: { printf("请输入密码记录号:");
scanf("%d",&i);
printf("密码记录号 密码名 密码\n");
printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
printf("按任意键继续");
getch();
break;
}
case 2: { printf("请输入密码名:");
scanf("%s",a);
printf("密码记录号 密码名 密码\n");
for(i=0;i<num;i++) {
if(strcmp(a,s[i].name)==0)
printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
}
printf("按任意键继续");
getch();
break;
}
}
break;
}
case 'D': { printf("请输入密码记录号:");
scanf("%d",&t);
if(t>-1 && t<num)
num--;
else {
printf("密码记录号不存在,按任意键继续\n");
getch();
break;
}
for(i=t;i<num;i++)
s[i]=s[i+1];
break;
}
case 'C': { printf("请输入密码记录号:");
scanf("%d",&t);
if(!(t>-1 && t<num)) {
printf("密码记录号不存在,按任意键继续\n");
getch();
break;
}
printf("请输入更改后的密码名:");
scanf("%s",s[t].name);
printf("请输入更改后的密码:");
scanf("%s",s[t].password);
break;
}
case 'S': { printf("密码记录号 密码名 密码\n");
for(i=0;i<num;i++)
printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
printf("\n");
printf("按任意键继续");
getch();
break;
}
case 'E': { printf("是否保存更改?(1.保存 2.不存)");
scanf("%d",&t);
if(t==1) {
output=fopen("data","wb");
fwrite(&num,sizeof(unsigned char),1,output);
for(i=0;i<num;i++)
fwrite(&s[i],sizeof(password),1,output);
fclose(output);
}
printf("按任意键退出");
getch();
return 0;
}
}
}
return 0;
}
转载请写上在我的博客上的该文章http://bccnwl.blog.hexun.com/7807917_d.html

搜索更多相关主题的帖子: 密码管理器 源代码 二进制 input 
2007-02-12 20:35
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

感谢各楼的回复!

回2楼:是的,这个版本确实不安全,我昨晚又改了一下,对密码进行加密,而且对该程序也加上密码,我将在帖后帖上。
回3楼:因为我要少用内存,没有用整数,而用的char类型,如果不是无符号型的(直接char定义),那么num所表示的最大数为128,而如果定义为无符号型的(unsigned char),则可以表示小于256的数,对于一个循环控制,这已经足够了。不用再用int等类型。
回5楼:请用Win-TC或TC编译,因为gcc不支持清屏(clrscr())函数。
回6楼:感谢你的解释,但我用num是进行循环控制,不是用来密码输入,但同时,密码输入我用的是平常的char,因为如果用无符号型,可能出现错误。(如 -1)
回7楼:同对二楼的回复
回8楼:是的,但好象用C很难实现输入加密(就是输入时很难防止后台的盗密码软件记录密码)
回10楼:应该在实际使用中不会出现,因为我的结构体可以存储至多29位密码和29位密码名,应该足够了。

以下是更新的程序:

/*SK-CHINA 密码管理器 0.0.1 BY S.K*/
/*写于2007.2.16 晚上 于家中 */
/*更新记录:(1)2007.2.25 */
/* 1.对存储的密码进行加密*/
/* 2.使用软件需要输入密码*/

#include<stdio.h>
#include<conio.h>
#include<string.h>

/*二进制数据文件结构*/
typedef struct {
char name[30];
char password[30];
} password;

int main(void) {
int i,k;
password s[100];
unsigned char num=1;
FILE *input,*output;
char p[30];

printf("正在装入数据...");
if((input=fopen("data","rb"))!=NULL) {
fread(&num,sizeof(unsigned char),1,input);
for(i=0;i<num;i++) {
fread(&s[i],sizeof(password),1,input);
/*解密*/
k=0;
while(s[i].name[k]!='\0') {
s[i].name[k]-=k;
k++;
}k=0;
while(s[i].password[k]!='\0') {
s[i].password[k]+=k;
k++;
}
}
fclose(input);
printf("\r数据装入完毕\n");
} else {
printf("\r无法找到已有的数据,程序将新建一个文件\n");
printf("请设定本管理器密码:");
scanf("%s",s[0].password);
strcpy(s[0].name,"密码管理器");
output=fopen("data","wb");
fwrite(&num,sizeof(unsigned char),1,output);
fwrite(&s[i],sizeof(password),1,output);
fclose(output);
}

clrscr();
printf("请输入密码:");
scanf("%s",p);
if(strcmp(p,s[0].password)!=0) {
printf("密码错误,程序将退出");
return 0;
}
clrscr();

while(1) {
char c;
char a[30];
int t;
printf("--------------------------------\n");
printf("SK-CHINA 密码管理器 0.0.1 BY S.K\n");
printf("--------------------------------\n");
printf("A:添加数据 C:更改数据 D:删除数据\n");
printf("F:查找数据 S:显示数据 E:保存退出\n");
printf("--------------------------------\n");
printf("---注意:密码记录0为本程序密码---\n");
printf("\n请输入你希望的操作:");
scanf("%c",&c);
clrscr();
switch(c) {
case 'A': { printf("请输入密码名:");
scanf("%s",s[num].name);
printf("请输入密码:");
scanf("%s",s[num].password);
num++;
break;
}
case 'F': { printf("请选择查找数据的方式:\n");
printf("1.密码记录号 2.密码名 --->");
scanf("%d",&t);
switch(t) {
case 1: { printf("请输入密码记录号:");
scanf("%d",&i);
printf("密码记录号 密码名 密码\n");

printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
printf("按任意键继续");
getch();
break;
}
case 2: { printf("请输入密码名:");
scanf("%s",a);
printf("密码记录号 密码名 密码\n");
for(i=0;i<num;i++) {
if(strcmp(a,s[i].name)==0)
printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
}
printf("按任意键继续");
getch();
break;
}
}
break;
}
case 'D': { printf("请输入密码记录号:");
scanf("%d",&t);
if(t>-1 && t<num)
num--;
else {
printf("密码记录号不存在,按任意键继续\n");
getch();
break;
}
for(i=t;i<num;i++)
s[i]=s[i+1];
break;
}
case 'C': { printf("请输入密码记录号:");
scanf("%d",&t);
if(!(t>-1 && t<num)) {
printf("密码记录号不存在,按任意键继续\n");
getch();
break;
}
printf("请输入更改后的密码名:");
scanf("%s",s[t].name);
printf("请输入更改后的密码:");
scanf("%s",s[t].password);
break;
}
case 'S': { printf("密码记录号 密码名 密码\n");
for(i=0;i<num;i++)
printf("%-12d%-32s%-30s\n",i,s[i].name,s[i].password);
printf("\n");
printf("按任意键继续");
getch();
break;
}
case 'E': { printf("是否保存更改?(1.保存 2.不存)");
scanf("%d",&t);
if(t==1) {
output=fopen("data","wb");
fwrite(&num,sizeof(unsigned char),1,output);
/*加密*/
for(i=0;i<num;i++) {
k=0;
while(s[i].name[k]!='\0') {
s[i].name[k]+=k;
k++;
}k=0;
while(s[i].password[k]!='\0') {
s[i].password[k]-=k;
k++;
}
}
for(i=0;i<num;i++)
fwrite(&s[i],sizeof(password),1,output);
fclose(output);
}
printf("按任意键退出");
getch();
return 0;
}
}
}
return 0;
}


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-02-26 09:43
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
回复:(C语言学习者)strcpy(s[0].name,
以下是引用C语言学习者在2007-2-26 10:07:03的发言:
strcpy(s[0].name,"密码管理器");这些函数也不安全,如真想加密用SSL这类,或者可以挡到一时。


其实输入很容易被其它软件截获,不只是这个,如scanf等常用函数也是很容易截获的

并且这个程序的变量在内存中没有加密,只是对存储文件进行了简单加密.

我认为这只是个管理器,没有太大的必要让安全性达到5星

不过如果有时间,我会再次改进一下


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2007-03-03 08:51
快速回复:[原创]密码管理器源代码
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033211 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved