社区
C++ Builder
帖子详情
如何加密、解密保存在配置文件里面的口令?
踏岸寻柳
2002-10-26 12:22:04
写了一个程序,要求用户进入时输入用户名、口令,校验正确后才可进入。
前提:用户名称、口令都是保存在配置文件*.ini里面的,程序启动时自动读取。
问题:如何对用户口令进行加密、解密处理?
要求:(1) 两个函数,加密、解密;
(2) 可以将用户输入的口令加密到文件中,可以将文件中密文解密出来;
(3) 可以尽量的简单,毕竟只是一个小小的测试 :)
...全文
228
10
打赏
收藏
如何加密、解密保存在配置文件里面的口令?
写了一个程序,要求用户进入时输入用户名、口令,校验正确后才可进入。 前提:用户名称、口令都是保存在配置文件*.ini里面的,程序启动时自动读取。 问题:如何对用户口令进行加密、解密处理? 要求:(1) 两个函数,加密、解密; (2) 可以将用户输入的口令加密到文件中,可以将文件中密文解密出来; (3) 可以尽量的简单,毕竟只是一个小小的测试 :)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cynwhm
2003-05-05
打赏
举报
回复
good
踏岸寻柳
2002-10-28
打赏
举报
回复
搞定,多谢invalid!
准备结帐!!!
大大怪老张
2002-10-26
打赏
举报
回复
保存到ini文件里可能不太安全吧...
1,加密解密都可以用 异或 操作...
2,建议对口令单向加密,即不允许解出密码,校验的时候先把输入的口令按同样的算法加密然后跟保存的密文口令对照.
3...
gxsky
2002-10-26
打赏
举报
回复
建议使用表来控制,这样功能会比较多一点!
转个贴子供参考--转自编程爱好者
简单的用户密码管理系统
一、功能
提供软件的一般用户管理系统
二、设计思路及程序实现
1.建立的表:以下表在建立时应该先加密码,程序打开时才由程序传递密码。以
避免直接用工具可打开DB文件。
① 用户资料表
用户ID: 用户登录时输入的用户名。
用户姓名: 用户的真实姓名。
密码: 用户密码(在存入前应该进行必要的加密)
权限: 用户级别。
有效期开始:该帐号从何时开始有效(下面程序没利用该功能)
有效期截止:何时该帐号不能用。
是否有效: 可以让该用户暂时为不可用。
出错次数: 用户连续输错密码次数(当有正确输入时复位)
出错限度: 允许输错密码次数,如果超过该限度,该用户置为不可用,必须找管理员为其复位。
备注: 必要的说明。
② 活动表:
用户ID: 记录进入系统的用户ID.
活动状态: 该用户是否是当前活动用户。(程序允许A用户进入后,不必退出系统而让B用户进入,A用户被置为非活动用户,当B退出后A被变为活动用户,只有第一个用户才能退出系统,同时清空活动表)
2. 进入系统的验证
① 供用户进入系统的密码输入窗口。
② 当用户输入完成后,首先打开用户资料表,检查该用户是否存在,若不存在,清空用户输入,提示不存在该用户,让用户从新输入,用户名输入错误这里将不作次数限制。
③ 若存在该用户,接着验证密码,如果正确,根据用户的使用期限,是否有效作判断,并根据结果作出是否允许用户进入系统。如果不允许,给出相应的提示后关闭系统。否则,根据用户的级别置某些功能不能使用,同时在活动表中记录该用户已进入,并复位出错次数字段。
④ 如果存在该用户,但密码错误,用户资料表中的出错次数加一。让用户从新输入。
⑤ 实现部分功能的程序
void __fastcall Tpasswdfm::Edit2KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
String userID;
bool endflag=0;
short cout=0;
if(Key==VK_RETURN)
{
userID=Edit1->Text;
Session->AddPassword(123456);
DM1->PasDTable->Active=true;
DM1->PasDTable->FindFirst();
while((!DM1->PasDTable->Eof) && (!endflag))//找到用户
{
if(DM1->PasDTable->FieldByName("用户代码")->Value==userID)
{ endflag=1;
}
else {DM1->PasDTable->Next();}
}
if(endflag)//找到了用户
{
if(DM1->PasDTable->FieldByName("密码")->Value==
passwdfm->Edit2->Text)
{
DM1->PasDTable->Edit();
cout=0;
DM1->PasDTable->FieldByName("出错次数")->Value=cout;
DM1->PasDTable->Post();
if(DM1->PasDTable->FieldByName("权限")->Value>1)
//根据权限设置不可用菜单
{
Main->N5->Enabled=false;
}
else {
Main->N5->Enabled=true;
}
Session->RemovePassword(123456);
DM1->PasDTable->Close();
passwdfm->Close();
Session->AddPassword(123456);// 用户使用表登记
DMPaswd->ActiveTable->Active=true;
DMPaswd->ActiveTable->FindFirst();
DMPaswd->ActiveTable->Insert();
DMPaswd->ActiveTable->FieldByName
("用户代码")->Value=userID;
DMPaswd->ActiveTable->FieldByName("活动状态")->Value=true;
DMPaswd->ActiveTable->Post();
Session->RemovePassword(123456);
DMPaswd->ActiveTable->Close();
}
else{MessageBox(NULL,"密码出错,累积三次将关闭系统","密码输入信息",MB_OK);
cout=DM1->PasDTable->FieldByName("出错次数")-Value;
cout++;
DM1->PasDTable->Edit();
DM1->PasDTable->FieldByName("出错次数")-Value=cout;
DM1->PasDTable->Post();
if(DM1->PasDTable->FieldByName("出错次数")->Value
< DM1->PasDTable->FieldByName("出错限制")-Value)
{passwdfm->Edit1->Text="";
passwdfm->Edit2->Text="";
passwdfm->ActiveControl=Edit1;
}
else
{ MessageBox(NULL,"登录失败次数超过限额,请与管理员联系","密码输入信息",MB_OK);
Application->Terminate();
}
}
}
else//无该用户
{MessageBox(NULL,"无该用户","密码输入信息",MB_OK);
passwdfm->Edit1->Text="";
passwdfm->Edit2->Text="";
passwdfm->ActiveControl=Edit1;
}
}
}
3、密码修改
一般用户只能修改自己的密码,当用户选择该功能时,提示用户输入一次旧密码,两次新密码。用户可以按清除键重新输入。当用户输入完成后,先从活动表找出该用户ID,再按ID寻找用户资料表找到该用户,先比较旧密码,错误提示从新修改,正确则完成修改。
4、超级用户可以设置/修改用户资料表中的所有资料及密码初始化。
大大怪老张
2002-10-26
打赏
举报
回复
http://expert.csdn.net/Expert/topic/1127/1127122.xml?temp=.8218653
里有几行代码可以实现你的要求。
大大怪老张
2002-10-26
打赏
举报
回复
mengge(踏岸寻柳)
呵呵,估计 invalid(空心菜) 会给你一个dll,里面有这两个函数,你只要调用就ok了,哈哈...
踏岸寻柳
2002-10-26
打赏
举报
回复
请问 invalid(空心菜) :
您的加密EncryptStr、解密函数DecryptStr都是怎么实现的呢!?
wangwl
2002-10-26
打赏
举报
回复
要自己设计一个加解密的算法咯,一般是对输入字符串进行运算吧,具体该怎么算就不清楚了,只知道我们学校计算机系有一门很深奥的课叫做密码学……
invalid
2002-10-26
打赏
举报
回复
测试代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
String str2;
EncryptStr(Edit1->Text,&str2);
Edit2->Text = str2;
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
String str2;
DecryptStr(Edit2->Text,&str2);
Edit1->Text = str2;
}
踏岸寻柳
2002-10-26
打赏
举报
回复
不是啊,我还要用加密后的口令呢!
也就是说,现在只是简单的加密、保存,到时候要取出来、解密。
字符串
加密
解密
DLL链接库
应用场景是程序把需要关键信息
加密
后
保存
在
配置文件
中,防止被第三人打开
配置文件
而获取信息。这些关键信息,有数据库连接账号和密码,API调用的security key等等。 第二组:
加密
和
解密
有一个Password控制,password...
SafeUSBDisk:安全的USB磁盘固件源代码
在本项目中,在ADB(Android Debug Bridge)的文件传输和控制协议基础上,增加的文件读写的加
解密
功能。
加密
算法使用国密SM3和SM4算法。 安全校验流程 固件第一次上电时,通过随机数发生器(物理噪声源)生成唯一密钥。...
无赖小子Wayv2.4(远程控制)源代码
20、由于采用防DES复杂
加密
技术,EXE
加密
器如果采用随机码
加密
则运行
解密
时会慢点 21、
加密
后的程序只不过是来帮木马、病毒之类的瞒天过海,运行后当然会原形毕露,也只能做到这一步 22、所以要先配置服务端后再...
Spring Cloud构建微服务架构:分布式配置中心(
加密
解密
)
... 最近正好想发一篇关于配置中心
加密
的细节内容,结果发现基础的
加密
解密
居然漏了,所以在这个入门系列中补充一下。后面再更新一下,使用配置中心的一些经验和教训。在微服务架构中,我...
配置中心Config
加密
配置文件
统一存储在GIT中,虽然增强了管理和版本控制,但是文件内容的安全性也成了问题。如果外部任意知道了GIT地址或spring-cloud-config-server的地址,那么
配置文件
的全部内容相当于对外完全开放。这个时候就需要...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章