哈希值

如何正确对用户密码进行加密?转自https://blog.csdn.net/zhouyan8603/article/details/80473083

时间秒杀一切 提交于 2019-12-23 04:27:12
本文介绍了对密码哈希加密的基础知识,以及什么是正确的加密方式。还介绍了常见的密码破解方法,给出了如何避免密码被破解的思路。相信读者阅读本文后,就会对密码的加密有一个正确的认识,并对密码正确进行加密措施。 作为一名Web开发人员,我们经常需要与用户的帐号系统打交道,而这其中最大的挑战就是如何保护用户的密码。经常会看到用户账户数据库频繁被黑,所以我们必须采取一些措施来保护用户密码,以免导致不必要的数据泄露。 保护密码的最好办法是使用加盐密码哈希( salted password hashing)。 重要警告: 请放弃编写自己的密码哈希加密代码的念头 !因为这件事太容易搞砸了。就算你在大学学过密码学的知识,也应该遵循这个警告。所有人都要谨记这点:不要自己写哈希加密算法! 存储密码的相关问题已经有了成熟的解决方案,就是使用 phpass ,或者在 defuse/password-hashing 或 libsodium 上的 PHP 、 C# 、 Java 和 Ruby 的实现。在对密码进行哈希加密的问题上,人们有很多争论和误解,可能是由于网络上有大量错误信息的原因吧。对密码哈希加密是一件很简单的事,但很多人都犯了错。本文将会重点分享如何进行正确加密用户密码。 密码哈希是什么? hash("hello") =

使用哈希加盐法来为密码加密(补充JAVA的实现)

南楼画角 提交于 2019-12-20 03:23:04
使用哈希加盐法来为密码加密 转自:http://www.cnblogs.com/jfzhu/p/4023439.html 转载请注明出处 (一)为什么要用哈希函数来加密密码 如果你需要保存密码(比如网站用户的密码),你要考虑如何保护这些密码数据,象下面那样直接将密码写入数据库中是极不安全的,因为任何可以打开数据库的人,都将可以直接看到这些密码。 解决的办法是将密码加密后再存储进数据库,比较常用的加密方法是使用哈希函数(Hash Function)。哈希函数的具体定义,大家可以在网上或者相关书籍中查阅到,简单地说,它的特性如下: (1)原始密码经哈希函数计算后得到一个哈希值 (2)改变原始密码,哈希函数计算出的哈希值也会相应改变 (3) 同样的密码,哈希值也是相同的 (4) 哈希函数是单向、不可逆的。也就是说从哈希值,你无法推算出原始的密码是多少 有了哈希函数,我们就可以将密码的哈希值存储进数据库。用户登录网站的时候,我们可以检验用户输入密码的哈希值是否与数据库中的哈希值相同。 由于哈希函数是不可逆的,即使有人打开了数据库,也无法看到用户的密码是多少。 那么存储经过哈希函数加密后的密码是否就是安全的了呢?我们先来看一下几种常见的破解密码的方法。 (二)几种常见的破解密码的方法 最简单、常见的破解方式当属字典破解(Dictionary Attack)和暴力破解(Brute Force

Java HashMap工作原理

丶灬走出姿态 提交于 2019-12-14 16:36:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 内部存储 Java HashMap类实现了Map<K, V>接口。这个接口中的主要方法包括: V put(K key, V value) V get(Object key) V remove(Object key) Boolean containsKey(Object key) HashMap使用了一个内部类Entry<K, V>来存储数据。这个内部类是一个简单的键值对,并带有额外两个数据: 一个指向其他入口(译者注:引用对象)的引用,这样HashMap可以存储类似链接列表这样的对象。 一个用来代表键的哈希值, 存储这个值可以避免 HashMap在每次需要时都重新生成键所对应的哈希值。 下面是Entry<K, V>在Java 7下的一部分代码: 1 2 3 4 5 6 7 staticclassEntry<K,V>implementsMap.Entry<K,V> { finalK key; V value; Entry<K,V> next; inthash; … } HashMap将数据存储到多个单向Entry链表中(有时也被称为桶bucket或者容器orbins)。所有的列表都被注册到一个Entry数组中(Entry<K, V>[]数组),这个内部数组的默认长度是16。

Java HashMap工作原理【图文版】

て烟熏妆下的殇ゞ 提交于 2019-12-14 16:36:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 大部分Java开发者都在使用Map,特别是HashMap。HashMap是一种简单但强大的方式去存储和获取数据。但有多少开发者知道HashMap内部如何工作呢?几天前,我阅读了java.util.HashMap的大量源代码(包括Java 7 和Java 8),来深入理解这个基础的数据结构。在这篇文章中,我会解释java.util.HashMap的实现,描述Java 8实现中添加的新特性,并讨论性能、内存以及使用HashMap时的一些已知问题。 内部存储 Java HashMap类实现了Map<K, V>接口。这个接口中的主要方法包括: V put(K key, V value) V get(Object key) V remove(Object key) Boolean containsKey(Object key) HashMap使用了一个内部类Entry<K, V>来存储数据。这个内部类是一个简单的键值对,并带有额外两个数据: 一个指向其他入口(译者注:引用对象)的引用,这样HashMap可以存储类似链接列表这样的对象。 一个用来代表键的哈希值, 存储这个值可以避免 HashMap在每次需要时都重新生成键所对应的哈希值。 下面是Entry<K, V>在Java 7下的一部分代码: static class

面试官问:为什么 String 的 hashCode 选择 31 作为乘子?

混江龙づ霸主 提交于 2019-12-14 11:14:59
某天,我在写代码的时候,无意中点开了 String hashCode 方法。然后大致看了一下 hashCode 的实现,发现并不是很复杂。但是我从源码中发现了一个奇怪的数字,也就是本文的主角31。这个数字居然不是用常量声明的,所以没法从字面意思上推断这个数字的用途。后来带着疑问和好奇心,到网上去找资料查询一下。在看完资料后,默默的感叹了一句,原来是这样啊。那么到底是哪样呢?在接下来章节里,请大家带着好奇心和我揭开数字31的用途之谜。 选择31的原因 在详细说明 String hashCode 方法选择数字31的作为乘子的原因之前,我们先来看看 String hashCode 方法是怎样实现的,如下: public int hashCode() { int h = hash; if (h == 0 && value.length > 0) { char val[] = value; for (int i = 0; i < value.length; i++) { h = 31 * h + val[i]; } hash = h; } return h; } 上面的代码就是 String hashCode 方法的实现,是不是很简单。实际上 hashCode 方法核心的计算逻辑只有三行,也就是代码中的 for 循环。我们可以由上面的 for 循环推导出一个计算公式,hashCode

Mac下查看Git某个文件的历史记录

烈酒焚心 提交于 2019-12-07 17:59:13
在windows下面有TortoiseGit很方便的就能点击右键查看到某一个文件的提交记录,但mac在SourceTree要找到某一个文件的提交记录才方便查看到该文件的历史记录。 方法: git log查看某一个文件的提交记录,然后根据git show 哈希值来看某一次提交记录,也可以直接在SourceTree下搜索该哈希值本看详细记录。 一、进入git项目目录 cd /projectName/ 二、查看指定文件提交日志 git log fileName 将显示文件的所有提交记录。 注意: q退出日志展示效果,回车或向下键显示更多提交日志 三、显示提交的详细信息 git show 哈希值 如果看起来不方便,可以在SourceTree中搜索相关哈希值,然后进行查看。 来源: CSDN 作者: xianglingchuan 链接: https://blog.csdn.net/xianglingchuan/article/details/71320229

给出两个单词,找到它们的最短距离 (以它们之间隔了多少个单词计数)。

天涯浪子 提交于 2019-12-07 10:07:17
有一篇文章内含多个单词,现给定两个单词,请设计一个高效算法,找出文中这两个单词的最短距离(即最少相隔的单词数,也就是两个单词在文章中位置的差的绝对值)。 给定一个string数组article,代表所给文章,同时给定文章的单词数n和待查找的两个单词x和y。请返回两个单词的最短距离。保证两个单词均在文中出现且不相同,同时保证文章单词数小于等于1000。 代码如下 public class Distance { public int getDistance(String[] s, int n, String x, String y) { //两个单词均在文中出现且不相同 int startX=-1, endY = -1;//1和0之间间隔为1 int minD = Integer.MAX_VALUE; for(int i=0; i<s.length; i++){ if(s[i].equals(x)) startX=i; else if(s[i].equals(y)) endY=i; else continue; //两个元素的距离:startX-endY的绝对值,与当前记录的最小间距minD比,取小的 if(startX!=-1 && endY!=-1) minD=Math.min(Math.abs(startX-endY), minD); } return minD; } }

web文件上传

陌路散爱 提交于 2019-12-05 17:36:44
今天在复习Web 的时候,做个一个文件上传的小Demo,发布一篇博客,记录一些笔记要点。和web做上传的一些注意事项。这个Demo 解决了Web上传问题中的以下问题: 1.实现web开发中的文件上传功能,需要完成2个步骤操作: ①在web页面中添加上传输入项 ②在servlet中读取上传文件的数据,并保存到本地盘中。 如何在web页面中添加上传输入项? <input type="file">标签用于在web页面中添加文件上传输入项,设 置文件上传输入项时刻须注意。 1.必须要设置inpu输入项的name属性,否则浏览器将不会发送上传文件的数据. 2.必须把form的enctype属性设置为multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在http 请求消息体中,并使用MIME协议对上传的文件进行描述,以方便接收方对上传数据进行解析和处理。 DisKFileItemFactory是创建 FileItem 对象的工厂,这个工厂类常用方法: public void setSizeThreshold(int size Threshould) 设置内存缓冲区的大小,默认为10k,当上传文件大于缓冲区大小时,fileupload组件将使用 临时缓存上传文件。 public void (java.io.File.repository) 指定临时文件目录

哈希冲突及四种解决方法

流过昼夜 提交于 2019-12-05 17:23:48
哈希冲突的产生原因 哈希是通过对数据进行再压缩,提高效率的一种解决方法。但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致经过哈希函数处理后仍然有不同的数据对应相同的哈希值。这时候就产生了哈希冲突。 产生哈希冲突的影响因素 装填因子(装填因子=数据总数 / 哈希表长)、哈希函数、处理冲突的方法 解决哈希冲突的四种方法 1.开放地址方法   (1)线性探测    按顺序决定哈希值时,如果某数据的哈希值已经存在,则在原来哈希值的基础上往后加一个单位,直至不发生哈希冲突。    (2)再平方探测    按顺序决定哈希值时,如果某数据的哈希值已经存在,则在原来哈希值的基础上先加1的平方个单位,若仍然存在则减1的平方个单位。随之是2的平方,3的平方等等。直至不发生哈希冲突。   (3)伪随机探测    按顺序决定哈希值时,如果某数据已经存在,通过随机函数随机生成一个数,在原来哈希值的基础上加上随机数,直至不发生哈希冲突。 2.链式地址法(HashMap的哈希冲突解决方法)   对于相同的哈希值,使用链表进行连接。使用数组存储每一个链表。   优点:   (1)拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;   (2)由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;   (3)开放定址法为减少冲突

区块链 - 哈希(Hash)

感情迁移 提交于 2019-12-04 20:00:46
章节 区块链 – 介绍 区块链 – 发展历史 区块链 – 比特币 区块链 – 应用发展阶段 区块链 – 非对称加密 区块链 – 哈希(Hash) 区块链 – 挖矿 区块链 – 链接区块 区块链 – 工作量证明 区块链 – 交易流程与挖矿 区块链 – 矿工的激励 区块链 – 默克尔树(Merkle Tree) 区块链 – 付款确认 区块链 – 处理冲突 区块链 – 用户隐私 区块链 – 防范攻击 区块链 – 进一步深入了解 密码学中,最重要的函数之一是哈希函数。哈希函数将任意大小的数据(内容)映射到固定大小的数据(哈希值)。 哈希函数是单向的,从内容生成哈希值很容易,但从哈希值映射到内容很难。 比特币使用SHA-256哈希函数,该函数生成一个大小为256位(32字节)的哈希值(输出)。如图所示 Bob在向Alice下订单时,创建了一条类似于上面所示的消息。把这个消息通过哈希函数生成32字节的哈希值。 哈希值的特点是,哈希值对于对于消息内容是唯一的,消息内容有任何改动,哪怕是多了个字符,生成的哈希值也是不一样的。 所以哈希值通常可以用来校验内容是否篡改。 来源: https://www.cnblogs.com/jinbuqi/p/11880593.html