用户登录
用户注册

分享至

setpasswordchar(0)

  • 作者: 用户37979420
  • 来源: 51数据库
  • 2020-04-21

1.怎么动态设置PasswordChar的值

最近在做一个功能,点密码框右边的小眼睛显示密码,

可是要显示密码就需要改变TextBox.PassWordChar的值,

这样的话就必须知道char类型的初始值是什么了,经过查找发现,char类型的初始值是'\0',

于是方案就出来了

private void picb_ShowPWD_MouseDown(object sender, MouseEventArgs e)

{

txt_Password.PasswordChar = '\0';

}

private void picb_ShowPWD_MouseUp(object sender, MouseEventArgs e)

{

txt_Password.PasswordChar = '*';

}

2.关于查看星号的原理

这个就很专业了,是软件编程方面的问题,你可以看看下面的东西: 几乎所有软件在用户密码输入框都做了手脚,使得用户输入的密码显示为星号“*”,这样就无法使得恶意用户直接看到密码。但是,网上有很多版本的星号密码查看器,可以还原星号为真实的密码。我根据自己的一些想法写了星号查看器的源代码,并且根据其原理做了一些防范手段。使用本源代码写的程序可以查看到很多软件如popo、msn、qq低版本的密码,用户使用VC、VB、BCB编写的软件并且直接使用Edit或者Text组件的话,本代码也可以还原其真实密码。而使用本修改手法以后的软件,使用网上盛传的passxp以及前面的查看方法均失效。好了,进入正题。 一、星号查看器原理 Edit或者Text组件有一个属性为“PasswordChar”,我们一般就是设置这个属性已实现把真实密码隐藏为星号的,但它们收到EM_GETPASSWORDCHAR消息以后,会返回其PasswordChar属性值,收到EM_SETPASSWORDCHAR消息后会修改其PasswordChar属性值,当然就可以取消原有的“*”设置,而使其显示真实字符,这时再向其发送WM_GETTEXT消息即可得到其真实密码,很多星号密码查看器都是根据这个原理写的。关键代码如下(以BCB为例):void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

POINT P;

::GetCursorPos(&P);//捕捉鼠标屏幕位置

//取得鼠标位置下窗口handle

HWND HWnd = ::WindowFromPoint(P);

//向此窗口送出"取得标题字符串"信息

char buffer[100];char Char;

Char = SendMessage (HWnd,EM_GETPASSWORDCHAR,0,0);//获取密码字符

PostMessage (HWnd,EM_SETPASSWORDCHAR,0,0);//取消密码字符

Sleep (60);

SendMessage (HWnd,WM_GETTEXT,255,long(buffer));获取真实密码

PostMessage (HWnd,EM_SETPASSWORDCHAR,Char,0);还原密码字符//显现在Form1窗口的字符串对象上

Caption = buffer;

} 这里用了一个计时器,每隔100毫秒调用一次上面的代码。 我们已经看出来了,主要是几个消息坏了我们的大事,如果我们能够屏蔽这几个消息,即可安全隐藏真实密码。网上有很多屏蔽消息的方法,但都显过于复杂,我的思路如下: 二、防范星号密码查看器 我们可以从TEdit派生一个新的组件,名字为TBugEyesEdit,然后修改其消息定义。在头文件添加代码如下: public:

__fastcall TBugEyesEdit(TComponent* Owner);

void __fastcall BugEyes(TMessage &Msg);//自定义消息处理函数

BEGIN_MESSAGE_MAP //消息影射

VCL_MESSAGE_HANDLER(EM_GETPASSWORDCHAR,TMessage,BugEyes)

VCL_MESSAGE_HANDLER(WM_GETTEXT,TMessage,BugEyes)

VCL_MESSAGE_HANDLER(EM_SETPASSWORDCHAR,TMessage,BugEyes)

END_MESSAGE_MAP(TEdit) //结束消息影射 然后在其cpp文件中添加如下代码:void __fastcall TBugEyesEdit::BugEyes(TMessage &Msg)

{

Msg.Result =0;

} 最后安装这个新的组件,并添加到自己的程序中,设置其PasswordChar属性为“*”,然后运行程序,这时星号密码查看器就失效了,无法再看到真实密码。

3.MFC编辑框密码切换的问题

新建一个基于对话框的MFC程序,设置都取默认值。

在对话框上添加一个EditBox(IDC_EDIT1)和一个CheckBox(IDC_CHECK1),

在CheckBox上点右键->Events。,

弹出的对话框左边选“BN_CLICKED”,再点右边的“Add and Edit”,然后“OK”,

在OnCheck1()函数里添加以下代码:

CButton *check = (CButton*)GetDlgItem(IDC_CHECK1);

CEdit *edit = (CEdit*)GetDlgItem(IDC_EDIT1);

if (check->GetCheck()==0)

{

edit->SetPasswordChar(0);

}else

{

edit->SetPasswordChar(_T('*'));

}

edit->RedrawWindow(NULL,NULL);

转载请注明出处51数据库 » setpasswordchar(0)

软件
前端设计
程序设计
Java相关