频道栏目
首页 > 资讯 > 其他综合 > 正文

使用C++模拟动态密码验证

17-10-07        来源:[db:作者]  
收藏   我要投稿

前言 实现原理 编程实现 核心函数 每隔一段时间修改一次 主程序 安全验证 生成器 主循环 完整源代码

前言

主要是最近特别想写一个保密的网站系统。然后自己大概考虑了一个实现方法,然后经过测试发现有效。后来在网上找有没有更好的解决方案,然后惊奇地发现这方面居然没有人来提供教程。

然后本菜鸡就把自己的方法放送出来,方便大家在进行各种开发的时候使用动态密码算法。

实现原理

其实整个原理是比较简单的。

比如说现在有两个设备,服务端和客户端。

两部设备同时拥有时钟和一套相同的算法。当用户需要一个新的动态密码时,两个设备会通过各自的时钟,使用相同的算法来计算出两个密码。此时,用户手中的密码应该是客户端的密码。在两个设备的时钟相同时,对应生成的密码也相同。用户输入客户端提供的密码到服务器进行验证,若密码相同,则验证通过。

所以现在需要模拟生成密码的算法。我在这里提供了一个很菜的算法,大家可以拿来参考一下。

编程实现

核心函数

这里面最核心的函数是ctime库中的两个函数:

int code_time=20;   //安全代码刷新时间 
int code_len=6;     //安全代码长度 

string trim(string a,int len)
{
    string b;
    len=min(len,(int)a.length());
    for(int i=0;itm_year+1900;
    int mon=t->tm_mon+1;
    int day=t->tm_mday;
    int hour=t->tm_hour;
    int min=t->tm_min;
    int sec=t->tm_sec;

    unsigned int result=(sec/code_time+1)*(sec/code_time+1)*(sec/code_time+1)*(sec/code_time+1)*(sec/code_time+1)*min*min*min*year*year*mon*mon*day*day+day*day*(sec/code_time+1)*(sec/code_time+1)*(hour+1)*(hour+1)*(min+1)-min;
    int a=result%2147480000+100000;

    char str[55];
    itoa(a,str,10);//将数字转换成字符数组存储到str中
    return trim(str,len);
}

trim(string)函数用于剪切字符串,提取字符串的前6位。

generate(tm,int)函数提供了一个非常暴力的算法,当然你也可以更换其中的算法,使得它随机性更高。

主循环

如果你想在程序启动的时候一直动态获取密码,并且显示还剩多长时间改变,那么你可以参照以下的代码:

    while(true)
    {
        tt=time(NULL);
        t=localtime(&tt);
        int time_remain=code_time-(t->tm_sec)%code_time-1;
        if(time_remain==code_time-1||!out)
        {
            out=true;
            system("cls");
            cout<<"Current security code : "<<>
        
   
相关TAG标签
上一篇:Spring入门(Schema-based AOP其四)
下一篇:Spring入门:Schema-based AOP其三
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站