注册 登录
编程论坛 C++教室

如何对实现加密的输入方式

阿邋 发布于 2010-05-15 13:01, 1479 次点击
也就是想把自己输入的数字用*号来代替。
比如本来要输入:89102
写个代码
使输入变为:*****
对数字加密了,使输入的数字不被看见

也就是类似网页上那种密码框输入方式的效果

不知道能不能实现呀,谢谢了
16 回复
#2
南国利剑2010-05-15 16:05
试试下面这个,输入六位数密码,然后,回车。
看看是否符合你的要求呢?
程序代码:

#include<iostream>
using namespace std;

int main(int argc, char* argv[])
{
    char n[6];
    cout<<"请输入六位数密码:";
    cin>>n;

    system("cls");

    cout<<"请输入六位数密码:******"<<endl;

    return 0;
}

#3
apull2010-05-15 17:03
char c;
c=getch();
putchar("*");
#4
最近不在2010-05-16 10:31
程序代码:
#include<iostream>
#include<string>     //string头
#include<conio.h>  //包函getch的头
using namespace std;

int main()
{
char c;
string str;
while(c!=13)    //回车作为输入的结束(13为回车的asciII)
{
c=getchar();   //输入字符不回显
str+=c;         //将输入字符保存到一个string类型字符串,string类成员可以直接+
if(c!=13)    //用于将非回车的输入字符转换成*,并显示出来
{
cout<<"*";
}
}
cout<<endl<<str<<endl;    //输出密码字符串实体
return 0;
}
#5
最近不在2010-05-16 10:33
将c=getchar改成c=getch,c=getchar会回显
#6
2010-05-16 11:11
都没考虑周全点的
#7
最近不在2010-05-16 11:15
程序代码:
#include<iostream>
#include<string>     //string头
#include<conio.h>  //包函getch的头
using namespace std;

int main()
{
char c;
string str;
while(c!=13)    //回车作为输入的结束(13为回车的asciII)
{
c=getch();   //输入字符不回显
str+=c;         //将输入字符保存到一个string类型字符串,string类成员可以直接+
if(c!=13)    //用于将非回车的输入字符转换成*,并显示出来
{
cout<<"*";
}
}
cout<<endl<<str<<endl;    //检验输出密码字符串实体
return 0;
}


重贴一次,前面有个位子写错了
#8
lijm19892010-05-16 12:42
程序代码:
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

int main()
{
    char c;
    string str;
    while((c=getch())!=13)
    {
        if(c!=8)
        {
            cout<<"*";
            str+=c;
        }
        else if(!str.empty())
        {
                str.erase(str.end()-1);
                cout<<"\b"<<" "<<"\b";
        }
      
    }
    cout<<endl<<str<<endl;
    return 0;
}
看看有退格的才爽~~~你们都不考虑退格的??万一输入错了怎么办呐??

[ 本帖最后由 lijm1989 于 2010-5-17 17:34 编辑 ]
#9
阿邋2010-05-17 11:12
谢谢啦,学习了
#10
钥匙兜2010-05-17 14:47
学习了。
#11
ciweitou1632010-05-18 19:38
收藏了
#12
yi198606992010-05-18 20:30
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

int main()
{
    char c;
    string str;
    while((c=getch())!=13)
    {
        if(c!=8)
        {
            cout<<"*";
            str+=c;
        }
        else if(!str.empty()) //   大侠,解释一下这句的意思???
        {
                str.erase(str.end()-1);
                cout<<"\b"<<" "<<"\b";
        }
      
    }
    cout<<endl<<str<<endl;
    return 0;
}
#13
yi198606992010-05-18 20:31
if (c!=8) 这个我也不知道什么意思
#14
lijm19892010-05-19 10:06
加点注释:
程序代码:
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

int main()
{
    char c;
    string str;
    while((c=getch())!=13)
    {
        if(c!=8) //  如果按下的不是Backspace(Backspace即退格键的ASCII码为8),则输出一个*,并保存该字符。
        {
            cout<<"*";
            str+=c;
        }
        else if(!str.empty())  // 这里是判断储存输入的字符串str是不是为空,如果是空的话,按下Backspace就不用做任何操作了
        {
            str.erase(str.end()-1); // 如果按下的为退格键,刚删除储存的密码中的最后一个字符,
            cout<<"\b"<<" "<<"\b";  // 让显示的 * 号与密码个数保持一致。
        }
      
    }
    cout<<endl<<str<<endl;
    return 0;
}
测试一下,
程序代码:
/*  初始密码为 12345678

 *  输入密码时用*保护输入的字符

 *  支持退格键 Backspace

 *  此程序要输入正确代码才能正常能出

 *  控制台做课程设计时需要账号密码可以参考,密码可以放在某文件内(不加数据库的话),然后自己定一个规则进行加密即可。

 
*/

#include<iostream>
#include<string>
#include<conio.h>
using namespace std;
int main()
{
    char c;
    string str;
    string code = "12345678";
    while(true)
    {
        str = "";
        while((c=getch())!=13)
        {
            if(c!=8)
            {
                cout<<"*";
                str+=c;
            }
            else if(!str.empty())
            {
                str.erase(str.end()-1);
                cout<<"\b"<<" "<<"\b";
            }
        }
        if (str == code)
        {
            cout<< endl <<"你输入的密码为:" << str <<endl;
            cout <<endl << "恭喜你,密码正确。可以正常退出!" << endl;
            return 0;
        }
        else
        {
            cout<< endl <<"你输入的密码为:" << str <<endl;
            cout <<endl <<"不好意思,密码错误,请再次输入:" << endl;
        }
    }
    return 0;
}
#15
laigaoat20052010-06-18 13:53
以下是引用lijm1989在2010-5-16 12:42:43的发言:

#include
#include
#include  
using namespace std;  
 
int main()
{
    char c;
    string str;
    while((c=getch())!=13)
    {
        if(c!=8)  
        {
            cout<<"*";
            str+=c;
        }
        else if(!str.empty())
        {
                str.erase(str.end()-1);  
                cout<<"\b"<<" "<<"\b";              //请问这里为什么要加        <<" "<<"\b"       呢?
        }
        
    }
    cout<

这句中                cout<<"\b"<<" "<<"\b";              //请问这里为什么要加        <<" "<<"\b"       呢?直接退一格不可以吗?为什么要输出一个空白再一次退格呢?
谢谢
#16
飞天猪10002010-06-18 18:40
受教
#17
shn5212010-06-18 23:14
学习了
1