• list.h

     #define  _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> //创建密码结点
    typedef struct passinfo
    {
    //密码
    char password[];
    //出现次数
    int ci;
    //下一个节点
    struct passinfo *pNext;
    }INFO, *PINFO; //头部插入
    PINFO addback(PINFO phead, char password[]);
    //按照次数排序
    PINFO sortbyci(PINFO phead);
    //按照密码排序
    PINFO sortbypass(PINFO phead);
    //显示数据
    PINFO show(PINFO phead);
    //判断存在与否
    int isin(PINFO phead, char password[]);
    //写入到文件
    void writetofile(PINFO phead, char path[]);
  • list.c
     #include "list.h"
    
     //头部插入
    PINFO addback(PINFO phead, char password[])
    {
    //开辟内存
    PINFO pnew = calloc(, sizeof(INFO));
    //拷贝密码
    strcpy(pnew->password, password);
    //初始化
    pnew->ci = ;
    pnew->pNext = NULL;
    //如果头结点为空直接插入
    if (phead ==NULL)
    {
    phead = pnew;
    }
    //否则头部插入
    else
    {
    pnew->pNext = phead;
    phead = pnew;
    }
    return phead;
    } //按照密码次数排序
    PINFO sortbyci(PINFO phead)
    {
    //冒泡排序法,一共冒泡这么多次
    for (PINFO p1 = phead; p1 != NULL;p1=p1->pNext)
    {
    for (PINFO p2 = phead; p2 != NULL; p2 = p2->pNext)
    {
    if (p2->pNext!=NULL)
    {
    //如果次数小则进行交换
    if (p2->ci < p2->pNext->ci)
    {
    //交换数据
    int citemp = p2->ci;
    p2->ci = p2->pNext->ci;
    p2->pNext->ci = citemp; char passtemp[];
    strcpy(passtemp, p2->password);
    strcpy(p2->password, p2->pNext->password);
    strcpy(p2->pNext->password, passtemp);
    }
    }
    }
    }
    } //按照密码排序
    PINFO sortbypass(PINFO phead)
    {
    //冒泡排序
    for (PINFO p1 = phead; p1 != NULL; p1 = p1->pNext)
    {
    for (PINFO p2 = phead; p2 != NULL; p2 = p2->pNext)
    {
    if (p2->pNext != NULL)
    {
    if (strcmp(p2->password, p2->pNext->password) < )
    {
    //交换数据
    int citemp = p2->ci;
    p2->ci = p2->pNext->ci;
    p2->pNext->ci = citemp; char passtemp[];
    strcpy(passtemp, p2->password);
    strcpy(p2->password, p2->pNext->password);
    strcpy(p2->pNext->password, passtemp); }
    }
    }
    }
    } //显示数据
    PINFO show(PINFO phead)
    {
    if (phead==NULL)
    {
    return;
    }
    else
    {
    printf("%s,%d\n", phead->password, phead->ci);
    show(phead->pNext);
    }
    return phead;
    } //判断密码是否存在
    int isin(PINFO phead, char password[])
    {
    PINFO p = phead;
    while (p!=NULL)
    {
    if (strcmp(p->password,password)==)
    {
    p->ci += ;
    return ;
    }
    p = p->pNext;
    } return ;//不在链表内部
    } //写入到文件
    void writetofile(PINFO phead, char path[])
    {
    FILE *pf = fopen(path, "w");
    PINFO p = phead;
    while (p != NULL)
    {
    //格式化打印到文件
    fprintf(pf, "%s %d\n", p->password, p->ci);
    p = p->pNext;
    }
    fclose(pf);
    }
  • main.c
     #include "list.h"
    #include <Windows.h>
    PINFO phead = NULL; //是否满足格式要求 账号 # 密码 # 邮箱
    int isoktosscanf(char *str)
    {
    //判断是否存在#
    char *p = strstr(str, "#");
    if (p!=NULL)
    {
    //继续判断是否存在第二个#
    if (strstr(p+,"#")!=NULL)
    {
    return ;
    }
    else
    {
    return ;
    }
    }
    else
    {
    return ;
    }
    } //消除空格
    void eatspace(char *str)
    {
    //当前位置
    int i = ;
    //游标
    int j = ;
    //双指针错位
    while ((str[i]=str[j++])!='\0')
    {
    if (str[i]!=' ')
    {
    i++;
    }
    }
    } //文件载入
    void fileload()
    {
    //打开文件
    FILE *pf = fopen("csdn.txt", "r"); //如果没有到文件末尾
    while (!feof(pf))
    {
    char str[] = { };
    char password[] = { };
    //从文件中获取一行
    fgets(str, , pf);
    //找到第一个#的位置
    char*p1 = strstr(str, "#");
    //找到第二个#的位置
    char*p2 = strstr(p1+, "#");
    //分别设置成'\0'
    *p1 = '\0';
    *p2 = '\0';
    //拷贝字符串
    strcpy(password, p1 + );
    //消除空格
    eatspace(password);
    //判断是否在链表中
    if (isin(phead, password) == )
    {
    //添加到头结点
    phead = addback(phead, password);
    }
    }
    fclose(pf); //按密码次数排序
    sortbyci(phead);
    //写入到文件
    writetofile(phead, "C:\\ci.txt");
    //按照密码相似度排序
    sortbypass(phead);
    //写入到文件
    writetofile(phead, "C:\\pass.txt");
    } //main函数
    void main4()
    {
    fileload();
    system("pause");
    }

72.挖掘CSDN密码到链表并统计密码出现次数生成密码库的更多相关文章

  1. 86.八千万qq密码按相似度排序并统计密码出现次数,生成密码库

    存储qq的文件地址以及按照密码相似度排序的文件地址 //存储qq的文件的地址 ] = "QQ.txt"; //按照密码相似度排序的文件地址 ] = "QQpassword ...

  2. 如何破解密码的哈希值,破解双MD5密码值

    这是关于我如何破解密码的哈希值1亿2200万* John the Ripper和oclHashcat-plus故事. 这是几个月前,当我看到一条推特:从korelogic约含共1亿4600万个密码的密 ...

  3. 扫二维码下载apk并统计被扫描次数(及微信屏蔽下载解决方案)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5395715.html 需求:想让用户扫描一个二维码就能下载APP,并统计被扫描次数. 两种实现方法: 1.一 ...

  4. python统计元素重复次数

    python统计元素重复次数 # !/usr/bin/python3.4 # -*- coding: utf-8 -*- from collections import Counter arr = [ ...

  5. 忘记常访问网站密码怎么办?教你如何查看浏览器已保存的密码,如何简单查看Chome浏览器保存的密码?

    利用场景: 同事或朋友外出有事,电脑未锁屏离开座位.可以利用这一间隙,查看Ta在Chrome浏览器上保存的账号密码 查看逻辑: 当我们要查看Chrome浏览器上保存的密码时,点击显示,会弹出一个对话框 ...

  6. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  7. Linux下随机生成密码的命令总结

    有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下 ...

  8. hash数组快速查找一个字符串中出现最多的字符,并统计出现的次数

    如何快速查找一个字符串中出现最多的字符,并统计出现的次数? 可以使用hash数组,也就是关联数组实现快速查找功能. function seek(str) { var hash = []; var ma ...

  9. python之pygal:掷两个不同的骰子并统计大小出现次数

    代码示例: # 掷两个不同的骰子并统计大小出现次数 import pygal from die_class import Die die = Die(6) # 实例化一个六面的骰子对象 die_10 ...

随机推荐

  1. awk条件语句

    条件语句用于在运行操作之前做一个測试.在前面的章节中,我们看到了模式匹配规则的一些演示样例. 模式匹配规则本质上就是影响输入循环的条件表达式. 在这一部分,我们主要就在action中所使用的条件语句进 ...

  2. quick 3.3载入Spine问题

    近期项目要升级到Quick 3.3, 而且使用了Spine作为动画编辑器, 在此把升级过程中.有关quick 3.3 载入Spine遇到的坑在此记录一下. 1.Spine版本号问题 首先Quick 3 ...

  3. 从零開始怎么写android native service?

    从零開始怎么写android native service Android service对于从事android开发的人都不是一个陌生的东西,非常多人可能会认为服务非常easy. 服务是简单,由于复杂 ...

  4. CCNP路由实验之九 路由策略

     CCNP路由实验之九 路由策略 路由器在公布与接收路由信息时,可能须要实施一些策略.以便对路由信息进行过滤,比如仅仅接收或公布满足一定条件的路由信息. 一种路由协议可能须要引入其它的路由协议发现 ...

  5. NuGet配置代理

    https://stackoverflow.com/questions/9232160/nuget-behind-proxy nuget.exe config -set http_proxy=http ...

  6. 关于在天机项目中遇到的常用git 命令

    1. 本地分支和远程分支 1>我们在本地创建分支,第一次push到远程是没有分支存在,执行git push 会有提示,按照提示的内容操作即可,当然我们也可以 git push origin fe ...

  7. Android中Gallery和ImageSwitcher同步自动(滚动)播放图片库

    本文主要内容是如何让Gallery和ImageSwitcher控件能够同步自动播放图片集 ,看起来较难,然而,实现的方法非常简单, 请跟我慢慢来.总的来说,本文要实现的效果如下图:(截图效果不怎么好) ...

  8. js正则学习分享

    http://www.cnblogs.com/rubylouvre/archive/2010/03/09/1681222.html http://www.cnblogs.com/tylerdonet/ ...

  9. Atcoder Grand Contest 107 A Biscuits

    A - Biscuits Time limit : 2sec / Memory limit : 256MB Score : 200 points Problem Statement There are ...

  10. Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法

    远程虚拟控制台依赖于java运行环境(jre),在通过浏览器打开链接前,系统必须安装jre环境,远程管理控制台其实就是一个java程序,打开相应的网站会下载一个jnlp(java网络加载协议)的文件, ...