题解:这段代码的要求如下,输入一段字符密码(长度<=8)以二进制的形式存放在磁盘中,在输入时需要验证两次输入是否正确。
第二个,登录。从磁盘中读取这个文件,然后再输入密码,看两者是否相同。

  1. 登录密码需要用到的知识
  2. 读取密码的注意点
  3. 登录密码检测

登录密码需要用到的知识
1.getch()取字符无回显。
2.strcmp()比较两个字符串是否相等(相等返回0)
3.对输入字符的检测(包括对回车符的判定)
代码如下:

#include "stdio.h"
#include "conio.h"
#include "string.h"
char a[],b[];
void logon()
{
FILE *fp;
int i,j;
do{
for(i=;i< && ((a[i]=getch())!='\r');i++)
putchar('*');
printf("\n再次输入密码\n");
for(j=;j< && ((b[j]=getch())!='\r');j++)
putchar('*');
a[i]='\0';
b[j]='\0';
if(strcmp(a,b)!=)
printf("\n输入错误,请重新输入!\n");
else
break;
}while();
fp=fopen("password.dat","wb");
i=;
while(a[i])
{
putc(a[i],fp);
i++;
};
}
int main()
{
logon();
return ;
}

读取密码的注意点
假如二进制文件中存放一个密码,已知密码长度<=8,如何读取密码?
由于在后面需要比较,所以使用字符串来存储,但是字符串又需要一个结束符,所以字符串的最大长度为9,得到:char pwd[9];
而密码的长度分为两种情况:
第一种,密码长度<8
第二种:密码长度最大=8
而在外存中的密码存储形式为:***** -1 ^(共中-1为eof),现在根据while(!feof(fp))来判定,会多读取一个字符。

while(!feof(fp) && i<)
pwd[i++]=fgetc(fp);

如果密码长度正好等于8,则循环结束后,i=8;如果密码长度小于8,比如=3,则循环结束后,i=4,数组pwd获得的数据为:
* * * -1,而i当前又等于4,所以要把这个-1置为字符串结束符,得到:pwd[i-1]=0。
最终,在判定上分为两种可能

while(!feof(fp) && i<8)
{
pwd[i++]=fgetc(fp);
}
if(i==)pwd[i]='\0';
else pwd[i-]='\0';

登录密码检测
有一个特别的地方是如果输入3次错误则返回,模型如下:

void logon()
{
int n=;
do
{
..
if(密码不同)
{
..;
n--;
}
}while(n>);
..
}

信息管理代码分析<一>登录密码的更多相关文章

  1. 信息管理代码分析<二>读取二进制文件数据

    first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...

  2. 学生管理系统开发代码分析笔记:jsp+java bean+servlet技术

    1 序言 学习java web的时候很渴望有一份完整的项目给我阅读,而网上的大部分项目拿过来都无法直接用,好不容易找到了一个学生管理系统也是漏洞百出.在此,我将边修改边学习这份代码,并且加上完全的注释 ...

  3. 集成TFS Build生成与SonarQube获取代码分析结果

    软件项目在开发过程中,往往由于任务重.时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付.等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间.研发表明,项目上线 ...

  4. 20155312 张竞予 Exp4 恶意代码分析

    Exp4 恶意代码分析 目录 基础问题回答 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控. (2)如果 ...

  5. 2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165316 Exp4 恶意代码分析 一.原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2 ...

  6. 20164301 Exp4 恶意代码分析

    Exp4 恶意代码分析 实验目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行.  2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinte ...

  7. 2018-2019-2 网络对抗技术 20165318 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165318 Exp4 恶意代码分析 原理与实践说明 实践目标 实践内容概述 基础问题回答 实践过程记录 1.使用schtasks指令监控系统 2.使用sys ...

  8. 2018-2019-2 20165330《网络对抗技术》Exp4 恶意代码分析

    目录 基础问题 相关知识 实验目的 实验内容 实验步骤 实验过程中遇到的问题 实验总结与体会 实验目的 监控你自己系统的运行状态,看有没有可疑的程序在运行 分析一个恶意软件,就分析Exp2或Exp3中 ...

  9. Https与Http,SSL,DevOps, 静态代码分析工具,RFID, SSH, 非对称加密算法(使用最广泛的一种是RSA), 数字签名, 数字证书

    在URL前加https://前缀表明是用SSL加密的. 你的电脑与服务器之间收发的信息传输将更加安全. Web服务器启用SSL需要获得一个服务器证书并将该证书与要使用SSL的服务器绑定. http和h ...

随机推荐

  1. java工程中不能存在多个数据库连接jar包

    java工程中不能存在多个数据库连接jar包 比如存在mysql-java-connector.jar的,放入mssqlserver.jar就会产生冲突.只能存在一个类型的jar包.

  2. python 的None 探究

    a = None b = None print id(a),id(b),id(None) # 9430224 9430224 9430224 可能在别的环境下运行不是这个数,但是这三个数应该是一样的. ...

  3. 吴裕雄 python 数据处理(2)

    import pandas as pd data = pd.read_csv("F:\\python3_pachongAndDatareduce\\data\\pandas data\\hz ...

  4. break、continue、pass介绍

    break.continue.pass介绍 break:跳出当前循环 continue:跳出本次循环,进行下一次循环 pass:什么也不做,占位.

  5. linux sleep用法

    应用程序:#include <syswait.h>usleep(n) //n微秒Sleep(n)//n毫秒sleep(n)//n秒驱动程序:#include <linux/delay ...

  6. oracle杀掉执行的死循环存储过程

    select * from v$db_object_cache where locks > 0 and pins > 0 and type='PROCEDURE'; select b.si ...

  7. The Closest M Points

    The Closest M Points http://acm.hdu.edu.cn/showproblem.php?pid=4347 参考博客:https://blog.csdn.net/acdre ...

  8. ECMAScript6新特性之String API

    填充到指定长度,默认使用空格填充. 一 左填充 var arr = []; for(var i=0;i<20;i++){ var str = (i+'').padStart(2,'0'); ar ...

  9. 基于AspectJ的注解方式进行AOP开发

    -------------------siwuxie095                                     基于 AspectJ 的注解方式进行 AOP 开发         ...

  10. MonkeyRunner原理初步--Android自动化测试学习历程

    章节:自动化基础篇——MonkeyRunner原理初步 主要讲解内容及笔记: 一.理论知识和脚本演示 最佳方式是上官网文档去查看monkeyrunner的介绍,官网上不去,就找了一个本地的androi ...