89.hash算法实现CSDN密码处理
- 初始化,数据的行数,hash链表结构体,存储头结点
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
char path[] = "csdn.txt";
//数据的行数
#define N 6428633
//字符串hash算法
unsigned int BKDRHash(char *str); //hash链表结构体(结构体)
struct beitai
{
char *pstr;//存储字符串
struct beitai *pNext;//下一个节点
}; //头结点
struct info
{
struct beitai *pbt;
}; //保持所有头结点
struct info *pall = NULL; - 字符串hash算法
//hasn算法
unsigned int BKDRHash(char *str)
{
//和数据对应的位数有关
unsigned int seed = ; // 31 131 1313 13131 131313 etc..
unsigned int hash = ; while (*str)
{
hash = hash * seed + (*str++);
} return (hash & 0x7FFFFFFF);
} - 实现读取一行的数据的修改,并对这个字符串进行hash算法
void changestr(char *str)
{
//备份地址
char *pbak = str;
//去除空格
//下标
int i = ;
//游标
int j = ;
while ((str[i] = str[j++]) != '\0')
{
if (str[i] != ' ')
{
i++;
}
}
//截断
char *p1 = strstr(pbak, "#");
if (p1 != NULL)
{
*p1 = '\0';
}
} - 载入内存
void init()
{ pall = malloc(N*sizeof(struct info));
memset(pall, , N*sizeof(struct info));//清空 //打开文件
FILE *pf = fopen(path, "r");
for (int i = ; i < N; i++)
{
char str[] = { };
char strbak[] = { };
//读取一行
fgets(str, , pf);
//拷贝
strcpy(strbak, str);
//字符串处理
changestr(str);
//获取hash对应的数字
unsigned int data = BKDRHash(str);
//进行取余
unsigned int id = data %N;
pall[id].pbt = addstr(pall[id].pbt, strbak);//找到链表节点,插入
}
fclose(pf);
} - 插入节点
//插入
struct beitai *addstr(struct beitai *phead, char *str)
{
//开辟节点
struct beitai *pnew = calloc(, sizeof(struct beitai));
//获取字符串长度并开辟内存
int length = strlen(str);
pnew->pstr = calloc(length + , sizeof(char));
//拷贝
strcpy(pnew->pstr, str);
//下一个结点为NULL
pnew->pNext = NULL;
//如果头结点为空
if (phead==NULL)
{
phead = pnew;
}
//否则头部插入
else
{
pnew->pNext = phead;
phead = pnew; }
return phead;
} - 实现查询
//实现查询
void find(struct beitai *phead, char *findstr)
{
while (phead!=NULL)
{
char*ps = strstr(phead->pstr, findstr);
if (ps!=NULL)
{
printf("%s", phead->pstr);//查找
}
phead = phead->pNext;
}
} - 获取有多少行
int getN()
{
FILE *pf = fopen(path, "r");
if (pf == NULL)
{
return -;
}
else
{
int i = ;
while (!feof(pf))
{
char str[] = { };
fgets(str, , pf);//读取
i++;
}
fclose(pf);
return i;
}
} - 主函数
//主函数
void main()
{
//初始化并载入内存
init();
//查询
while ()
{
char str[] = { };
scanf("%s", str);
unsigned int id = BKDRHash(str) % N;
find(pall[id].pbt, str);
}
system("pause");
}
89.hash算法实现CSDN密码处理的更多相关文章
- [区块链] 密码学中Hash算法(基础)
在介绍Hash算法之前,先给大家来个数据结构中对hash表(散列表)的简单解释,然后我再逐步深入,讲解一下hash算法. 一.Hash原理——基础篇 1.1 概念 哈希表就是一种以 键-值(key-i ...
- Hash算法总结(转)
1. Hash是什么,它的作用先举个例子.我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志.也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的人 ...
- 关于 Spring Security 5 默认使用 Password Hash 算法
账户密码存储的安全性是一个很老的话题,但还是会频频发生,一般的做法是 SHA256(userInputpwd+globalsalt+usersalt) 并设置密码时时要求长度与大小写组合,一般这样设计 ...
- Hash算法总结
1. Hash是什么,它的作用 先举个例子.我们每个活在世上的人,为了能够参与各种社会活动,都需要一个用于识别自己的标志.也许你觉得名字或是身份证就足以代表你这个人,但是这种代表性非常脆弱,因为重名的 ...
- [区块链] 加密算法——Hash算法(进阶)
为了为保证存储于区块链中的信息的安全与完整,区块链中使用了包含密码哈希函数和椭圆曲线公钥密码技术在内的大量的现代密码学技术,同时,这些密码学技术也被用于设计基于工作量证明的共识算法并识别用户. 在前边 ...
- Hash算法的讲解
散列表,又叫哈希表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash ta ...
- 从hash算法到java hashcode()
转载 https://blog.csdn.net/Walk_er/article/details/74976146 hash算法是一个摘要算法(yy:描述性算法:可以给一个物体确切的描述,但是不能通过 ...
- 深入理解 hashcode 和 hash 算法
深入理解 hashcode 和 hash 算法 2017年12月30日 23:06:07 阅读数:5197 标签: hashhashmaphashcode二进制 更多 个人分类: jdk-源码 ht ...
- 常见的哈希Hash算法 & MD5 & 对称非对称加密 & 海明码
参考 Link 另外,这篇文章也提到了利用Hash碰撞而产生DOS攻击的案例: http://www.cnblogs.com/charlesblc/p/5990475.html DJB的算法实现核心是 ...
随机推荐
- happy Mom ——php mysqli DES加密
看完<爱你就像爱生命>这本书,真的看出小波哥很有才,跟小波哥比起来,我唯一拿的出手的可能就是我比他的颜值了.想起一句话,人不是因为美丽而可爱,而是因为可爱而美丽.所以我对我的要求是,继续修 ...
- Bootstrap概览
摘选自runnoob.com,bootstrap4所有api概览: 一.安装: 弹性盒子(flexbox) Bootstrap 3 与 Bootstrap 4 最大的区别就是 Bootstrap 4 ...
- ES6学习笔记(二)变量的解构与赋值
1.数组的解构赋值 1.1基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1 ...
- codeforces111D. Petya and Coloring(组合数学,计数问题)
传送门: 解题思路: 要求一条直线分割矩阵时左右颜色数一样,那么就说明一个问题.直线左右移动时是不会改变左右矩阵的颜色集合的.所以说明:2~m-1列的颜色集一定属于第一列与第m列颜色集的交集.而且第一 ...
- Comput_picture
import requestsfrom pyquery import PyQuerycount = 1url = "https://www.169tp.com/diannaobizhi/&q ...
- Java Web学习总结(10)——Session详解
摘要:虽然session机制在web应用程序中被采用已经很长时间了,但是仍然有很多人不清楚session机制的本质,以至不能正确的应用这一技术.本文将详细讨论session的工作机制并且对在Java ...
- HypericHQ
https://sourceforge.net/projects/hyperichq-zh-cn/?source=typ_redirect
- cogs 1405. 中古世界的恶龙[The Drangon of Loowater,UVa 11292]
1405. 中古世界的恶龙[The Drangon of Loowater,UVa 11292] ★ 输入文件:DragonUVa.in 输出文件:DragonUVa.out 简单对比时间 ...
- c#+windows api SetWindowsHookEx 全局钩子 demo 下载
效果图 源代码下载地址: http://download.csdn.net/detail/dhfekl/7522141
- hdu1533Going Home KM算法
//给一个n*m的图, //m表示人,h表示房子 //问全部人走回家的最小步数 //每一个人仅仅能进一间房 //非常明显的最大带权匹配 //每一个人到每每间房的距离即为权值 //因为是求最小,仅仅要改 ...