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

  • 存储qq的文件地址以及按照密码相似度排序的文件地址

    1 //存储qq的文件的地址
    2 char path[512] = "QQ.txt";
    3 //按照密码相似度排序的文件地址
    4 char pathsortbypass[512] = "QQpasswordsort.txt";
  • 标识qq一共有多少行

    1 //文件一共有多少行
    2 #define N  84331446
  • 创建结构体存储密码,并把文件载入内存

    1 //密码信息
    2 struct info
    3 {
    4     char str[17];
    5 };
    6
    7 //指向所有结构体的指针
    8 struct info *pall = NULL;
     1 //初始化
     2 void init()
     3 {
     4     //记录时间
     5     time_t start, end;
     6     time(&start);
     7
     8     pall = calloc(N, sizeof(struct info));//分配内存
     9     if (pall==NULL)
    10     {
    11         puts("calloc fail");
    12         return;
    13     }
    14     //打开文件
    15     FILE *pf = fopen(path, "r");
    16
    17     //依次读取
    18     for (int i = 0; i <N; i++)
    19     {
    20         char str[50] = { 0 };
    21         fgets(str, 50, pf);
    22         char *pfind = strstr(str, "----");
    23         //每行格式123----qweqe
    24         if (pfind !=NULL)
    25         {
    26             int length = strlen(pfind + 4);
    27             //刷掉非法密码
    28             if (length<17)
    29             {
    30                 //拷贝字符串
    31                 strcpy(pall[i].str, pfind + 4);
    32             }
    33         }
    34     }
    35     //关闭文件
    36     fclose(pf);
    37     time(&end);
    38     printf("文件读取话费%f秒\n", difftime(end, start));
    39 }
  • 按照相似度快速排序

     1 //快速排序比较函数,比较两个结构体
     2 int com(void *p1, void *p2)
     3 {
     4     struct info *pinfo1 = p1;
     5     struct info *pinfo2= p2;
     6     return strcmp(pinfo1->str, pinfo2->str);//排序的函数
     7 }
     8
     9 //排序
    10 void sort()
    11 {
    12     //记录时间
    13     time_t start, end;
    14     time(&start);
    15
    16     //快速排序
    17     qsort(pall, N, sizeof(struct info), com);
    18
    19     time(&end);
    20     printf("排序话费%f秒\n", difftime(end, start));
    21 }
  • 写入文件

     1 //写入文件
     2 void writetofile()
     3 {
     4     //存储时间
     5     time_t start, end;
     6     //开始时间
     7     time(&start);
     8     //以写的方式打开文件
     9     FILE *pf = fopen(pathsortbypass, "w");
    10     //判断每一个
    11     for (int  i = 0; i < N; i++)
    12     {
    13         //格式 5----pass
    14         char allstr[100] = { 0 };
    15         //存储密码
    16         char istr[100] = { 0 };
    17         strcpy(istr, pall[i].str);//拷贝备份
    18
    19         int j = 1;//出现一次
    20         //循环直到最后一个不相等
    21         while (strcmp(pall[i].str,pall[i+1].str)==0)
    22         {
    23             i++;//循环前进
    24             j++;//计数
    25         }
    26         //合成字符串写入
    27         sprintf(allstr, "%d----%s", j, istr);
    28         //写入到文件
    29         fputs(allstr, pf);
    30     }
    31
    32     //关闭文件
    33     fclose(pf);
    34
    35     //结束
    36     time(&end);
    37
    38     printf("排序花费%f秒\n", difftime(end, start));
    39 }
  • 获取文件有多少行

     1 //获取文件有多少行
     2 int getN(char *path)
     3 {
     4     int i = 0;
     5     FILE *pf = fopen(path, "r");
     6     if (pf==NULL)
     7     {
     8         return -1;
     9     }
    10     else
    11     {
    12         while (!feof(pf))
    13         {
    14             char str[50] = { 0 };
    15             fgets(str, 50, pf);
    16             i++;
    17         }
    18
    19         fclose(pf);
    20         return i;
    21     }
    22 }
  • 主函数

     1 //主函数
     2 void main()
     3 {
     4     //初始化载入到内存
     5     init();
     6     //密码相似度排序
     7     sort();
     8     //写入文件
     9     writetofile();
    10     system("pause");
    11 }

完整代码

  1 #define  _CRT_SECURE_NO_WARNINGS
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4 #include<string.h>
  5 #include<time.h>
  6
  7 //存储qq的文件的地址
  8 char path[512] = "QQ.txt";
  9 //按照密码相似度排序的文件地址
 10 char pathsortbypass[512] = "QQpasswordsort.txt";
 11 //文件一共有多少行
 12 #define N  84331446
 13
 14 //密码信息
 15 struct info
 16 {
 17     char str[17];
 18 };
 19
 20 //指向所有结构体的指针
 21 struct info *pall = NULL;
 22
 23 //写入文件
 24 void writetofile()
 25 {
 26     //存储时间
 27     time_t start, end;
 28     //开始时间
 29     time(&start);
 30     //以写的方式打开文件
 31     FILE *pf = fopen(pathsortbypass, "w");
 32     //判断每一个
 33     for (int  i = 0; i < N; i++)
 34     {
 35         //格式 5----pass
 36         char allstr[100] = { 0 };
 37         //存储密码
 38         char istr[100] = { 0 };
 39         strcpy(istr, pall[i].str);//拷贝备份
 40
 41         int j = 1;//出现一次
 42         //循环直到最后一个不相等
 43         while (strcmp(pall[i].str,pall[i+1].str)==0)
 44         {
 45             i++;//循环前进
 46             j++;//计数
 47         }
 48         //合成字符串写入
 49         sprintf(allstr, "%d----%s", j, istr);
 50         //写入到文件
 51         fputs(allstr, pf);
 52     }
 53
 54     //关闭文件
 55     fclose(pf);
 56
 57     //结束
 58     time(&end);
 59
 60     printf("排序花费%f秒\n", difftime(end, start));
 61 }
 62
 63
 64 //快速排序比较函数,比较两个结构体
 65 int com(void *p1, void *p2)
 66 {
 67     struct info *pinfo1 = p1;
 68     struct info *pinfo2= p2;
 69     return strcmp(pinfo1->str, pinfo2->str);//排序的函数
 70 }
 71
 72 //排序
 73 void sort()
 74 {
 75     //记录时间
 76     time_t start, end;
 77     time(&start);
 78
 79     //快速排序
 80     qsort(pall, N, sizeof(struct info), com);
 81
 82     time(&end);
 83     printf("排序话费%f秒\n", difftime(end, start));
 84 }
 85
 86 //初始化
 87 void init()
 88 {
 89     //记录时间
 90     time_t start, end;
 91     time(&start);
 92
 93     pall = calloc(N, sizeof(struct info));//分配内存
 94     if (pall==NULL)
 95     {
 96         puts("calloc fail");
 97         return;
 98     }
 99     //打开文件
100     FILE *pf = fopen(path, "r");
101
102     //依次读取
103     for (int i = 0; i <N; i++)
104     {
105         char str[50] = { 0 };
106         fgets(str, 50, pf);
107         char *pfind = strstr(str, "----");
108         //每行格式123----qweqe
109         if (pfind !=NULL)
110         {
111             int length = strlen(pfind + 4);
112             //刷掉非法密码
113             if (length<17)
114             {
115                 //拷贝字符串
116                 strcpy(pall[i].str, pfind + 4);
117             }
118         }
119     }
120     //关闭文件
121     fclose(pf);
122     time(&end);
123     printf("文件读取话费%f秒\n", difftime(end, start));
124 }
125
126
127 //获取文件有多少行
128 int getN(char *path)
129 {
130     int i = 0;
131     FILE *pf = fopen(path, "r");
132     if (pf==NULL)
133     {
134         return -1;
135     }
136     else
137     {
138         while (!feof(pf))
139         {
140             char str[50] = { 0 };
141             fgets(str, 50, pf);
142             i++;
143         }
144
145         fclose(pf);
146         return i;
147     }
148 }
149
150
151 //主函数
152 void main()
153 {
154     //初始化载入到内存
155     init();
156     //密码相似度排序
157     sort();
158     //写入文件
159     writetofile();
160     system("pause");
161 }

原文地址:https://www.cnblogs.com/xiaochi/p/8458245.html

时间: 2024-11-07 14:41:55

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

72.挖掘CSDN密码到链表并统计密码出现次数生成密码库

list.h 1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <string.h> 5 6 //创建密码结点 7 typedef struct passinfo 8 { 9 //密码 10 char password[20]; 11 //出现次数 12 int ci; 13 //下一个节点 14 struct passinfo *pNext;

密码设置复杂度和期限

以下是通过man pam_cracklib查看获得的解释一 PAM_CRACKLIB模块可以做的密码策略:1.回文限制2.字符数量限制3.字符类型限制4.重复字符限制5.新密码和老密码重复字符数量限制6.新密码和老密码的相似度记忆7.记忆最近几次的密码不能和老密码重复 authtok_type=XXX           The default action is for the module to use the following prompts when requesting passwo

Linux是对用户的密码的复杂度要求设置【转】

那么Linux是如何实现对用户的密码的复杂度的检查的呢?其实系统对密码的控制是有两部分组成: 1 cracklib 2 /etc/login.defs pam_cracklib.so 才是控制密码复杂度的关键文件/lib/security/pam_cracklib.so, Redhat公司专门开发了cracklib这个安装包来判断密码的复杂度.如果你想查看pam_cracklib的一些参数,那么就使用下面命令 [[email protected] security]# man pam_crack

Ubuntu 设置简单密码,复杂度太高

Ubuntu 中创建的用户密码复杂度很高,如果想设置1234 ,或者与账户名相同的密码时,SystemSetting 中是不可以设置的. 可以通过简单的命令来设置 其中 anyongfei 是账户名 sudo passwd anyongfei Ubuntu 设置简单密码,复杂度太高,布布扣,bubuko.com

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

有时候经常为如何设置一个安全.符合密码复杂度的密码而绞尽脑汁,说实话,这实在是一个体力活而且浪费时间,更重要的是设置密码的时候经常纠结.终于有一天实在忍不住了,于是学习.整理了一下如何使用Linux下命令来随机生成安全.符合密码复杂度的命令. 俗话说"工欲善其事必先利其器".如果能用挖土机的,你为什么要用锄头? 最近一直在反思自己:习惯性用原始.老旧的方式解决问题.而不擅长利用一些工具快捷.方便的解决问题. 1:mkpaswd命令 mkpasswd 是Linux自带的一个密码生成工具,

Python随机生成密码

废话不说,直贴代码 # coding:utf-8 """ Author : han Email : [email protected] Time : 2019-07-27 17:12 Home Team : Golden State Warriors 随机生成 密码 6位 ~ 20位 三个等级 """ import sys import random import string def main(d='6', level='1'): "

随机生成密码

[[email protected] ~]# cat pwd1.sh read -p '请输入您需要的密码位数:' digit read -p '请输入您需要的密码个数:' num for i in `seq $num` do </dev/urandom tr -dc '[email protected]#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c$digit; echo done [[email protected]-node1 ~]# sh pwd

Linux系统下使用pwgen生成密码的使用教程

pwgen生成的密码易于记忆且相当安全.从技术上来说,容易记忆的密码不会比随机生成的密码更加安全.但是,在大多数情况下,pwgen生成的密码已经足够安全,除了网银密码等需要高安全等级的情况外.使用易于记忆的密码的好处就是你不会把这些密码写下来或者存到电脑上的某个地方,这样做本来就是不安全的. 安装pwgen,在终端窗口输入(适用于Debian系列的Linux系统): sudo apt-get install pwgen 不带任何参数就运行pwgen,将会输出满屏幕的密码.你可以从中选择一个作为自

Shell脚本批量创建用户并随机生成密码

要求:批量创建10个系统账号oldboy01-oldboy10,并设置生成密码(密码不同). 实现脚本: #!/bin/bash #Question3 for i in $(seq -w 10) do         useradd -s /bin/bash oldboy$i         echo "password$i" | md5sum | tee -a passwd.txt | passwd --stdin  oldboy$i done 脚本执行效果: [[email pro