老板让我做一个组织机构代码卡的程序,其实挺简单。其中有一处是改变ic卡密码的。原来是这样的:
...
char *buf=new char[256];
buf=itoa(m_NP1,buf,10);//m_NP1是一个UINT型的变量,对应一个edit框
k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)buf);//改变密码的函数。
但是这样有一个毛病,就是如果m_NP1以0开头,则buf中只是从左边第一个非0的开始计算。
后来,我改了一下。
CString str;
GetDlgItem(IDC_EDIT_NP1)->GetWindowText(str);
k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)str);//改变密码的函数。
这样倒是改正了以前做法的不足,可要命的是,我把IC卡的密码改为"00000000",提示修改成功,但是,再一次运行程序验证密码,如果输入"0000000"竟然提示口令不正确,用原来的密码试也不对,这可如何是好?开始验证的函数如下:
k=MemCard_VerifyPin((unsigned char *)m_Pass.GetBuffer(32));//其中m_Pass一个edit框的变量,为CString型。原来的方法(我没有改变以前),如果修改密码就没有问题。
...
char *buf=new char[256];
buf=itoa(m_NP1,buf,10);//m_NP1是一个UINT型的变量,对应一个edit框
k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)buf);//改变密码的函数。
但是这样有一个毛病,就是如果m_NP1以0开头,则buf中只是从左边第一个非0的开始计算。
后来,我改了一下。
CString str;
GetDlgItem(IDC_EDIT_NP1)->GetWindowText(str);
k=MemCard_ChangePin((unsigned char *)m_Pass.GetBuffer(32),
(unsigned char *)str);//改变密码的函数。
这样倒是改正了以前做法的不足,可要命的是,我把IC卡的密码改为"00000000",提示修改成功,但是,再一次运行程序验证密码,如果输入"0000000"竟然提示口令不正确,用原来的密码试也不对,这可如何是好?开始验证的函数如下:
k=MemCard_VerifyPin((unsigned char *)m_Pass.GetBuffer(32));//其中m_Pass一个edit框的变量,为CString型。原来的方法(我没有改变以前),如果修改密码就没有问题。
解决方案 »
- 如何在vc++中编程实现图幅分块
- 编译时出现一个错误,求解决!!!
- InNoteBox Class.lnk如何使用
- ADO连接EXCEL 不支持事务?
- SetWindowsHookEx(WH_GETMESSAGE,HookProc,hInstance,NULL);
- 1000¥求购IE插件源代码和相关资料
- 小弟初学API函数,有个例子小弟编写后无法正常运行,但却找不到错误,请高人指点
- 在ATL中如何使用MFC的CString类!
- ImageList_Remove问题, 用其删第一个image,再取第一个图时,还是原图,没有变成第二个图,是怎么回事?
- splash screen是什么意思?万分感谢!!!!
- 各位大虾,请教一个问题??????????????
- 关于界面线程的问题,希望大家能解决
那么恢复原来的代码再次修改密码再去验证
肯定是你那里弄糊涂了。