精华内容
下载资源
问答
  • 编程语言里的数据类型:java里的hashmap, python里的哈希表 - dict负载均衡:一致性哈希算法文件和程序的版本管理:通过哈希值来判断用户的密码:我的密码,网站有,会不会被偷?以上的场景,覆盖了:开发的编码,...

    我们先说下hash这个词出现的场景。

    编程语言里的数据类型:java里的hashmap, python里的哈希表 - dict
    负载均衡:一致性哈希算法
    文件和程序的版本管理:通过哈希值来判断
    用户的密码:我的密码,网站有,会不会被偷?

    以上的场景,覆盖了:开发的编码,服务的管控,版本的管理。贯穿于整个互联网项目的周期中。

    hash是一系列的算法

    特点:能给一大堆不规律的数据,给出长度固定的标签,这些标签的值分散的比较均匀。数据可以变成标签,标签没办法变成数据。

    比如:从学校里随机抽取1000个学生,不论是从成绩,家庭收入来进行划分,他们大概率都会成正态分布。毕竟中庸的人最多,这就很不“hash”了。但如果按年纪、班级来分类,会比较平均。这就很”hash”了。

    776c0913-8612-eb11-8da9-e4434bdf6706.png

    编程语言里的数据类型

    因为它均匀分布的特性,就很适合用来做数据存储。

    例如:有6个苹果,分别编号「2,27,125,234553,6635,9」要放进抽屉里,方便下次拿出,怎么给抽屉编号。方便拿到需要的苹果。典型的key与value的对应问题。

    • 最好的方式,按数值大小给抽屉编号,但是会有很大的空间浪费。比如2与27之间就会有二十几个空抽屉。
    • 另一种方式就是直接6个抽屉,放6个苹果,要拿多少号的苹果,就一个抽屉一个抽屉找。节约了抽屉,但是翻找东西的时候麻烦了。
    • 还有种方式就是 编码%10 来放苹果。那么 27号苹果在7号抽屉里。125号在5号抽屉里。6635号苹果,因为有冲突,要么也放到5号抽屉里挤一挤,挤不下则放在10+1=11号抽屉里。

    这就是通过“hash”的方式来保证更方便的拿到苹果。

    当然问题答案和问题在实际并不会如此简单因为数据是会有各种格式的,字符串,浮点…..

    7c6c0913-8612-eb11-8da9-e4434bdf6706.png

    还有冲突的问题,两个一样的编号如何放置?每个苹果编码结尾数字都一样怎么办?

    负载均衡

    这里主要使用一致性哈希算法。还是之前6个编号号的苹果。按照之前的说法,有10个抽屉0-9就可以把这些苹果如下放到抽屉里

    二:2,七:27,五:125,三:234553,五:6635,九:9

    问题是我们只有一号,三号,八号三个抽屉。

    解决方案是:“二:2”我们打算放到二号抽屉里,但是没有这个抽屉,就往后放到三号里面去。那么“五:125”就放到八号抽屉了。“九:9”的话到头了,我们就从头找起。找零号没有…一号,有,放进去。

    这样就可以解决苹果放置的问题了。关键的问题是什么呢?如果八号突然没了。那八号的苹果拿出来,接着往后放,找九号抽屉,没有,零号抽屉也没有一号抽屉有,放进去。

    这里的例子就是,分布式群集有多个节点,怎么通过键来确定数据存在哪个节点里了。

    876c0913-8612-eb11-8da9-e4434bdf6706.png

    文件和程序的版本管理

    更新系统的时候,我们能看到各种版本号,但是整个程序是有很多小小的部分组成的,哪个文件要不要用新的怎么确认?

    假如是分布式系统里,一个服务要分发到多个机器上,更新的时候怎么确定哪些文件要被更新。

    有几种方式:

    • 看时间戳,旧的就不要,全用新的。那么问题就是有的旧文件其实还能用。
    • 看版本号,低于这个版本就不要。问题也差不多,版本号低,但是内容有可能一样,覆盖也只是换个名字,没必要。
    • 看文件的hash值。这个hash值,是通过文件内容,很快速的算出来的一个值,内容一样,hash值就一样。只要hash值不同,就说明文件不同,那就更新掉。

    可以理解为,是一种很极致的压缩方式,可以把1个G的文件,压缩成32位的数字。但是没办法解压…如同一辆压成铁砣的特斯拉…..这里的hash值,可能是SHA1,SHA2、MD5…这些不同的算法算出来的。

    Python的版本控制也开始使用hash值了。
    详见《PEP 552 -- Deterministic pycs》 https://www.python.org/dev/peps/pep-0552/

    用户的密码

    • 我的某宝账号,里面有几十万,密码会不会被里面的员工偷偷看了?
    假如密码是123456,数据库里是存的是它的哈希值“ea8a706c4c34a168”。
    这样别人就没办法从数据库里看到你的密码了。
    有的网站觉得不安全,会存123456+”特定字符串”的方式在算出哈希值。
    那么你的密码可能就变成了“41630d269546335f”。
    有人拿到这串字符也猜不出你的密码是123456,是不是觉得安全一些了。
    • 某某站点xx万用户信息泄露,用户密码被公开。
    假如你的密码真是123456,发生这种事情,你的密码会很不安全。
    因为你的密码太简单了。会被暴力破解,所谓暴力破解就是一个一个常用密码来试。
    如果你的密码够复杂,就算信息泄露,你的密码仍然会很安全。
    这就是为什么现在的网站都有密码复杂度的提示。

    不信的人可以试试破解下“ba34275de232a490”

    发送“hash”获取以上字符串的原文。

    更多有趣内容敬请关注“码农在中年”公众号 ⬇️

    展开全文
  • IPFS节点存储文件有一串编码,叫做CID哈希值,它的出现验证了数据存储的安全性。 最新业内报道,8月30日,北京奇虎科技有限公司(360)、中国信息通信研究院日前联合公开一种“基于联盟区块链的

    IPFS作为当前分布式存储的卓越技术,布局前期已经有了多种核心原理技术的支撑,多方面得到了业界的认可。目前国家也在新基建的搭建上布局规划IPFS技术,使得IPFS的发展开通了绿色通行证。

    IPFS不仅在数据传输速度上做出了质的优化,而且还解决了数据存储的安全稳定性,在IPFS节点后台客户端就可以得到简单认证。IPFS节点存储文件有一串编码,叫做CID哈希值,它的出现验证了数据存储的安全性。

    最新业内报道,8月30日,北京奇虎科技有限公司(360)中国信息通信研究院日前联合公开一种“基于联盟区块链的标识解析方法、装置、存储介质及服务器”专利,申请日期为2021年4月29日,申请公布号:CN113315811A。

    天眼查App显示,该专利属于计算机技术领域。方法包括在第一对外节点接收到标识解析请求的情况下,从第一对外节点对应的本地数据库中查询是否存在与标识解析请求中的标识符对应的IPFS哈希值。若未查询到IPFS哈希值,则基于标识解析请求向联盟区块链中除第一对外节点之外的其他节点发送第一查询请求;接收由联盟区块链中响应于第一查询请求的节点发送的IPFS哈希值,并基于IPFS哈希值通过第一对外节点访问IPFS服务,以获取IPFS哈希值对应的标识解析信息由此可有效提高对标识解析过程的安全性,保证通过标识解析得到的数据不易被篡改。

    由此可见,IPFS哈希值已经在IPFS技术里得到了业界权威的认证,在未来的发展上,IPFS势必会以凶猛之势冲击当前中心化存储主宰的互联网结构,抓住当前的这个机会,便赢在了起跑线。

    展开全文
  • 一,前言 前说TreeMap添加,删除,搜索的时间复杂度都是 O(logn),效率算是比较高的了。...哈希表处理数据的流程如下 我们拥有如下数据 哈希表添加、搜索、删除的步骤都是类似的 1).利用哈希函数生成Key对

    一,前言

    前说TreeMap添加,删除,搜索的时间复杂度都是 O(logn),效率算是比较高的了。但是TreeMap有约束条件
    1). Key必须具备可比较性
    2).元素分布是有序的
    但是在实际开发中我们的Key不具有可比较性,Map中的元素分布也不需要顺序。不考虑顺序,不考虑Key的可比较性,Map有更好的实现方案,平均复杂度可以达到O(1)级别。就是使用哈希表来实现Map。

    二,初识哈希表

    哈希表处理数据的流程如下
    我们拥有如下数据在这里插入图片描述
    哈希表添加、搜索、删除的步骤都是类似的
    1).利用哈希函数生成Key对应的index。
    2).根据index操作定位数组元素。

    如下图, Jack 通过哈希函数生成的 index 为 14,再通过数组的索引 14 去操作(增,删,改)Jack 对应的 value。
    哈希表是典型的空间换时间,下图中的table的空间使用率还是挺低的,存三个映射关系,却需要预留很多的数组空间。
    哈希表内部的数组元素,很多地方也叫Bucket(桶),整个数组叫Buckets 或者叫 Bucket Array。
    在这里插入图片描述

    三,哈希冲突和解决方法

    哈希冲突
    前面我们讲到了 Map 中的 Key 通过哈希函数生成了数组的索引 index 。如果两个 Key 通过哈希函数算出来的结果 index 相同,就会发生哈希冲突。如下图:Rose 和 Kate 的 index 值重复了。
    在这里插入图片描述
    解决方案

    1). 开放地址法:按照一定的规则向其他的地址探测,直到遇到空桶。
    ①线性探测法:Rose先占据了索引 3。Kate 再算出来索引也为 3,发现 3 已经被占了,然后就往下找到 4,如果 4 也被占了,就再往下找,直到找到没有被占的索引,就将其作为自己的索引。
    ①平方探测法:就不是一个一个往下找了,比如先找索引3下面 1² 的位置(也就是4),看有没有被占据,如果被占据就找3下面 2 ²(也就是7)…

    2).再哈希法:设计多个哈希函数,这个哈希函数算出来冲突,再用其他的哈希函数来算。

    3).链地址法:通过链表将同一index的元素串联起来。

    四,jdk1.8 解决哈希冲突的方法

    • 默认使用单向链表将元素串联起来。
    • 在添加元素时,可能会由单向链表转为红黑树来存储(当哈希表容量 >= 64 且单向链表的节点数大于8 时)。
    • 当红黑树的节点数量少到一定程度时,又会变成链表。
    • JDK1.8 中的哈希表是使用 链表 + 红黑树来解决哈希冲突的
      在这里插入图片描述
      思考:为什么用单向链表,而不用双向链表?
      双向链表的效率不是比单向的要高吗?为啥不用双向链表呢?
      1.单向链表每次插入都要遍历一遍链表。每次插入前的遍历其实并不多余。因为我们插入一个value都要找一下value在链表中是否存在。遍历正好可以起到查找的作用。
      2.单向链表比双向链表少一个指针的,可以节省空间。

    五,哈希函数

    • 哈希表中哈希函数的实现步骤大概如下:
      1). 先生成Key的哈希值(整数)
      2). 再让Key的哈希值和数组的长度大小进行相关运算,生成一个索引。这个步骤的主要目的就是,让哈希值不要超过数组的长度。
      在这里插入图片描述但是取模运算符的效率低下。为了提高效率我们可以使用&来代替%(有前提条件:将数组长度设计为2的幂)
      在这里插入图片描述
      为什么要求数组长度为2的幂,而且还和数组长度减去1 来 & 运算呢?
      &运算一定不陌生吧,2^n - 1的二进制一定都是1。
      比 2的n次方 小的和 2的n次方减1 &运算就是他本身。
      在这里插入图片描述
      比 2的n次方 大的和 2的n次方减1 & 运算就只取小的部分。
      在这里插入图片描述
      用 & 代替 %,也可以控制索引小于数组长度,而且效率还比%要高。

    • 一个良好的哈希函数
      让哈希值更加均匀分布—>减少哈希冲突的次数—>提升哈希表的性能

    六,如何生成Key的哈希值

    • Key的常见种类:整数,浮点数,字符串对象,自定义类型
    • 不同种类的Key,哈希值的生成方式不一样,但是目标是一致的。
      1).尽量让每个Key的哈希值唯一。
      2).尽量让Key的所有信息参与运算。

    1.Key为Int

    整数的哈希值就是他本身。
    在这里插入图片描述

    2.Key为Float

    浮点数在内存中是以二进制存储的
    将浮点数存储的二进制格式转化成整数
    在这里插入图片描述

    3.Key为Long

    long类型就是整数啊?那他的哈希值不就是他本身了吗?
    并不是的,java定义哈希值是int类型,int类型是4字节32位,而long是8字节64位的。那我们怎么办呢?有一种方法,我们只取long的前32位或者后32位,显然这种方案是不妥当的,因为Key只有一半的信息参与运算。
    java官方是采用如下的方案:
    在这里插入图片描述
    这样运算的目的是让高32位和低32位混合运算出32位的哈希值。我们最后强转为int,那么只取最后的32位,也就是图中的橙色部分。
    在这里插入图片描述
    为什么用异或 ^运算而不用其他的(比如&和 |)
    用&运算如果高位都是1,那就相当于没算。
    用|运算,大部分情况结果都是1。算出来也没意义,冲突太多了。

    4.Key为Double

    也没什么好说的了,就是结合了一下浮点数和Long的处理步骤。代码如下
    在这里插入图片描述

    5.Key为String

    • 字符串“5480”是如何计算出来的呢?
      5 * 10^3 + 4 * 10^2 +8 * 10^1 +9 * 10^0

    • 若字符串是由若干个字符组成的呢?
      1).比如“jack”,由j,a,c,k四个字符组成
      2).因此“jack”的哈希值可以表示为: j * n^3 + a * n^2 + c * n^1 + k * n^0,我们发现算这个算式 n的次方 要算四次,我们可以做一个优化 [ (j * n + a) * n + c] * n + k,提升效率。
      3).在JDK中,乘数n为31,为什么使用31呢?
      因为31是一个奇素数,JVM会将31 * i 自动优化成 (i << 5) - i

    • 代码逻辑

    public static void main(String[] args) {
    		String string = "jack";
    		
    		int length = string.length();
    		int hashCode = 0;
    		
    		for(int i = 0;i <length;i ++) {
    			char c = string.charAt(i);
    			hashCode = hashCode * 31 + c;
    		}
    		System.out.println(hashCode);
    	}
    
    

    以后用到就不需要自己写了,JDK为我们提供了方法string.hashCode(); 调用一下就行了。

    基础类型的总结

    上面我们说了5种基本类型的Key生成哈希值的算法。JDK已经为我们封装好了(在基本类型的封装类中),以后再使用的时候直接调用方法即可。

    		Integer a = 110;
    		Float b = 10.1f;
    		Long  c = 1516l; 
    		Double d = 10.9;
    		String e = "rose";
    		
    		System.out.println(a.hashCode());
    		System.out.println(b.hashCode());
    		System.out.println(c.hashCode());
    		System.out.println(d.hashCode());
    		System.out.println(e.hashCode());
    

    结果如下:
    在这里插入图片描述

    6.Key为自定义类型

    首先提出几个问题
    1.自定义类型如何计算出哈希值
    2.两个自定义类型数据算出来的索引值相同怎么处理?

    (1)自定义类型如何计算出哈希值

    准备工作创建Person类

    public class Person {
    	
    	private int age ;
    	private float height;
    	private String name;
    
    	public Person(int age, float height, String name) {
    		super();
    		this.age = age;
    		this.height = height;
    		this.name = name;
    	}
    	
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	public float getHeight() {
    		return height;
    	}
    	public void setHeight(float height) {
    		this.height = height;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    
    }
    
    • 自定义类型如果没有重写hashcode方法,那么就将地址作为哈希值
      在这里插入图片描述

    打印结果如下:为地址值

    在这里插入图片描述

    在工作中却不常使用地址值做哈希值。还记得我们之前计算哈希值的要求吗?尽量让key的所有信息参与运算,我们把Person作为key,就要尽量让Key的所有信息参与运算。于是乎我们采用下面的方法:还记得字符串怎么算哈希值的吗?
    • 重写hashcode方法
    public int hashCode() {
    		int hashCode = Integer.hashCode(age);
    		hashCode = hashCode * 31 + Float.hashCode(height);
    		hashCode = hashCode * 31 + (name != null ? name.hashCode():0);
    		return hashCode;
    	}
    

    同样的31,同样的叠乘。和字符串算哈希值有异曲同工之妙吧。
    然后我们再次打印p1和p2的哈希值:
    在这里插入图片描述
    p1和p2的哈希值相同了。

    (2)两个自定义类型数据算出来的索引值相同怎么处理?

    我们再上面讲链表的时候就说过,当几个同样类型的值算出来索引相同是如何处理的。比如p1,p2,p3(引用类型做Key)算出来的索引相同。我们用链表连接起来,每次在链表后面添加。但是添加的时候要查找Key在链表中是否存在。先加p1,比较p2和p1是否相等,不相等就在链表尾部加p2,比较p3和p1是否相等,不相等再比较p3和p2是否相等,不相等就在链表尾部添加p3。
    问题来了,我们如何比较p1,p2,p3是否相等呢?
    用compare?我们之前说过因为不需要数据可比较性我们才用hashmap的。所以不能用。
    用“==”?这是比较地址,每个数据的地址肯定都不一样,这样比较没意义。
    最终还是用equal方法。

    在Person中我们重写equal方法完成内容的比较,逻辑都写在注释上了

    	public boolean equals(Object obj) {
    		//内存地址相同肯定相等
    		if (this == obj) {
    			return true;
    		}
    		//类型不一样肯定不相等
    		if (obj == null || obj.getClass() != getClass()) {
    			return false;
    		}
    		//下面开始比较成员变量
    		Person person = (Person) obj;
    		return person.age == age
    				&& person.height == height
    				&& person.name == null ? name == null:person.name.equals(name);
    	}
    
    展开全文
  • 使用Windows自带命令校验文件哈希值

    千次阅读 2020-05-03 17:34:13
    Certutil是一个windows预装的CLI程序,主要作用是转储和显示证书颁发机构(CA),...这里记录如何使用这个程序校验文件,网上很多资源的下载很多都会提供文件的md5,SHA256等等之类的哈希值,便于下载者校验文件是否...

    文章目录

    Certutil

    Certutil是一个windows预装的CLI程序,主要作用是转储和显示证书颁发机构(CA),配置信息,证书服务, CA 组件的备份和还原以及验证证书、密钥对和证书链,它作为证书服务的一部分安装。可用于校验文件MD5、SHA1、SHA256,下载恶意文件和免杀。

    这里记录如何使用这个程序校验文件,网上很多资源的下载很多都会提供文件的md5SHA256等等之类的哈希值,便于下载者校验文件是否存在被修改,破坏等改变文件内容的操作

    例如我们下载了当前最新版的kali操作系统I的SO镜像,这里官方提供了SHA256的校验码
    在这里插入图片描述
    在这里插入图片描述
    使用Certutil得到kali-linux-2020.1b-installer-amd64.iso文件的SHA256密文

    certutil -hashfile [文件绝对路径] [md5/sha256/sha1]
    

    在这里插入图片描述
    在这里插入图片描述
    校验结果相同,证明下载的文件是正常的

    Certutil的帮助文档

    帮助文档命令:certutil -?

    PS C:\Users\Administrator\Downloads> certutil -?
    
    动词:
      -dump             -- 转储配置信息或文件
      -dumpPFX          -- 转储 PFX 结构
      -asn              -- 分析 ASN.1 文件
    
      -decodehex        -- 解码十六进制编码的文件
      -decode           -- 解码 Base64 编码的文件
      -encode           -- 将文件编码为 Base64
    
      -deny             -- 拒绝挂起的申请
      -resubmit         -- 重新提交挂起的申请
      -setattributes    -- 为挂起申请设置属性
      -setextension     -- 为挂起申请设置扩展
      -revoke           -- 吊销证书
      -isvalid          -- 显示当前证书部署
    
      -getconfig        -- 获取默认配置字符串
      -ping             -- Ping Active Directory 证书服务申请接口
      -pingadmin        -- Ping Active Directory 证书服务管理接口
      -CAInfo           -- 显示 CA 信息
      -ca.cert          -- 检索 CA 的证书
      -ca.chain         -- 检索 CA 的证书链
      -GetCRL           -- 获取 CRL
      -CRL              -- 发布新的 CRL [或仅增量 CRL]
      -shutdown         -- 关闭 Active Directory 证书服务
    
      -installCert      -- 安装证书颁发机构证书
      -renewCert        -- 续订证书颁发机构证书
    
      -schema           -- 转储证书架构
      -view             -- 转储证书视图
      -db               -- 转储原始数据库
      -deleterow        -- 删除服务器数据库行
    
      -backup           -- 备份 Active Directory 证书服务
      -backupDB         -- 备份 Active Directory 证书服务数据库
      -backupKey        -- 备份 Active Directory 证书服务证书和私钥
      -restore          -- 还原 Active Directory 证书服务
      -restoreDB        -- 还原 Active Directory 证书服务数据库
      -restoreKey       -- 还原 Active Directory 证书服务证书和私钥
      -importPFX        -- 导入证书和私钥
      -dynamicfilelist  -- 显示动态文件列表
      -databaselocations -- 显示数据库位置
      -hashfile         -- 通过文件生成并显示加密哈希
    
      -store            -- 转储证书存储
      -enumstore        -- 枚举证书存储
      -addstore         -- 将证书添加到存储
      -delstore         -- 从存储删除证书
      -verifystore      -- 验证存储中的证书
      -repairstore      -- 修复密钥关联,或者更新证书属性或密钥安全描述符
      -viewstore        -- 转储证书存储
      -viewdelstore     -- 从存储删除证书
      -UI               -- 调用 CryptUI
      -attest           -- 验证密钥证明请求
    
      -dsPublish        -- 将证书或 CRL 发布到 Active Directory
    
      -ADTemplate       -- 显示 AD 模板
      -Template         -- 显示注册策略模板
      -TemplateCAs      -- 显示模板的 CA
      -CATemplates      -- 显示 CA 的模板
      -SetCASites       -- 管理 CA 的站点名称
      -enrollmentServerURL -- 显示、添加或删除与 CA 关联的注册服务器 URL
      -ADCA             -- 显示 AD CA
      -CA               -- 显示注册策略 CA
      -Policy           -- 显示注册策略
      -PolicyCache      -- 显示或删除注册策略缓存项目
      -CredStore        -- 显示、添加或删除凭据存储项目
      -InstallDefaultTemplates -- 安装默认的证书模板
      -URLCache         -- 显示或删除 URL 缓存项目
      -pulse            -- 以脉冲方式执行自动注册事件或 NGC 任务
      -MachineInfo      -- 显示 Active Directory 计算机对象信息
      -DCInfo           -- 显示域控制器信息
      -EntInfo          -- 显示企业信息
      -TCAInfo          -- 显示 CA 信息
      -SCInfo           -- 显示智能卡信息
    
      -SCRoots          -- 管理智能卡根证书
    
      -DeleteHelloContainer -- 删除 Hello 登录容器。
         ** 在使用此选项后, 用户需要注销才能完成。**
      -verifykeys       -- 验证公/私钥集
      -verify           -- 验证证书,CRL 或链
      -verifyCTL        -- 验证 AuthRoot 或不允许的证书 CTL
      -syncWithWU       -- 与 Windows 更新同步
      -generateSSTFromWU -- 通过 Windows 更新生成 SST
      -generatePinRulesCTL -- 生成捆绑规则 CTL
      -downloadOcsp     -- 下载 OCSP 响应并写入目录
      -generateHpkpHeader -- 使用指定文件或目录中的证书生成 HPKP 头
      -flushCache       -- 刷新选定进程(例如 lsass.exe)中的指定缓存
      -addEccCurve      -- 添加 ECC 曲线
      -deleteEccCurve   -- 删除 ECC 曲线
      -displayEccCurve  -- 显示 ECC 曲线
      -sign             -- 重新签名 CRL 或证书
    
      -vroot            -- 创建/删除 Web 虚拟根和文件共享
      -vocsproot        -- 创建/删除 OCSP Web Proxy 的 Web 虚拟根
      -addEnrollmentServer -- 添加注册服务器应用程序
      -deleteEnrollmentServer -- 删除注册服务器应用程序
      -addPolicyServer  -- 添加策略服务器应用程序
      -deletePolicyServer -- 删除策略服务器应用程序
      -oid              -- 显示 ObjectId 或设置显示名称
      -error            -- 显示错误代码消息文本
      -getreg           -- 显示注册表值
      -setreg           -- 设置注册表值
      -delreg           -- 删除注册表值
    
      -ImportKMS        -- 为密钥存档导入用户密钥和证书到服务器数据库
      -ImportCert       -- 将证书文件导入数据库
      -GetKey           -- 检索存档的私钥恢复 Blob,生成恢复脚本 或恢复存档的密钥
      -RecoverKey       -- 恢复存档的私钥
      -MergePFX         -- 合并 PFX 文件
      -ConvertEPF       -- 将 PFX 文件转换为 EPF 文件
    
      -add-chain        -- (-AddChain) 添加证书链
      -add-pre-chain    -- (-AddPrechain) 添加预植证书链
      -get-sth          -- (-GetSTH) 获取签名树头
      -get-sth-consistency -- (-GetSTHConsistency) 获取签名树头更改
      -get-proof-by-hash -- (-GetProofByHash) 获取哈希证明
      -get-entries      -- (-GetEntries) 获取项
      -get-roots        -- (-GetRoots) 获取根
      -get-entry-and-proof -- (-GetEntryAndProof) 获取项和证明
      -VerifyCT         -- 验证证书 SCT
      -?                -- 显示该用法消息
    
    
    CertUtil -?              -- 显示动词列表(命名列表)
    CertUtil -dump -?        -- 显示 "dump" 动词的帮助文本
    CertUtil -v -?           -- 显示所有动词的所有帮助文本
    
    CertUtil: -? 命令成功完成。
    PS C:\Users\Administrator\Downloads>
    

    Get-FileHash

    Get-FileHash命令可用于通过使用指定的哈希算法来计算文件的哈希值,可以接受的哈希算法有:SHA1,SHA256,SHA384,SHA512,MD5

    PS C:\Users\Administrator\Desktop\Test\php> get-filehash -?
    
    NAME
        Get-FileHash
    
    SYNTAX
        Get-FileHash [-Path] <string[]> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    
        Get-FileHash [-LiteralPath] <string[]> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    
        Get-FileHash [-InputStream] <Stream> [[-Algorithm] {SHA1 | SHA256 | SHA384 | SHA512 | MD5}] [<CommonParameters>]
    
    
    ALIASES
        None
    
    
    REMARKS
        Get-Help cannot find the Help files for this cmdlet on this computer. It is displaying only partial help.
            -- To download and install Help files for the module that includes this cmdlet, use Update-Help.
            -- To view the Help topic for this cmdlet online, type: "Get-Help Get-FileHash -Online" or
               go to https://go.microsoft.com/fwlink/?LinkId=517145.
    
    
    PS C:\Users\Administrator\Desktop\Test\php> 
    

    在这里插入图片描述

    展开全文
  • 校验和checksum、哈希值是什么?

    千次阅读 2020-07-31 00:09:03
    通过比较你手头文件和原始文件的校验和,能够确保你对原始文件的拷贝是真的并且不存在错误。 校验和通常也被称之为哈希值、哈希和、哈希码,或简称为哈希–hash。 [外链图片转存失败,源站可能有防盗链机制,建议将...
  • 这些实用程序利用的重复数据删除方案,仅在指定哈希列表的情况下允许将文件“传送”到您的Dropbox帐户中,当然前提是文件已经存在于它们的服务器上。 这样可以在Dropbox帐户之间进行任意的匿名文件传输。 该软件包...
  • 项目场景: 最近在做一个有关1553总线的项目 问题描述: 提示:驱动安装显示文件哈希值不在指定的目录中 原因分析: 通过百度后,发现驱动文件哈希值不在指定的目录下的问题,说明此设备的驱动未注册签名 需要...
  • 由于哈希冲突,不同值的对象也可能具有相同的哈希值。这是为什么呢?今天番茄加速就来分析一下。 字符串驻留 In [1]: a = ‘something’ …: b = ‘some’+‘thing’ …: id(a)==id(b) Out[1]: True 如果上面例子返回...
  • 哈希算法 简介 将任意长度的二进制值串映射为固定长度的二进制值串的映射规则就是哈希...因为哈希值的长度是固定的, 那么就表示数据是有限的, 而要哈希的数据是无限的, 就必然会有数据存在哈希值相同的情况 哈希算法
  • 最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。 进一步的,默克尔树可以推广到多叉树的情形。 默克尔树的特点是,底层数据的...
  • 搜索(查找)使用的数据结构 平衡二叉树: 内存中使用的——二叉平衡树 AVL树 红黑树 哈希表: 目的(查询) 基本原理:1....数据(随机访问O(1) ) ...哈希:任意数据=>...哈希值 哈希值不能返回到原始数...
  • 数据结构和算法-哈希

    2020-12-29 10:41:55
    对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大相同 散列冲突的概率要很小,对于不同的原始数据哈希值相同的概率非常小 哈希算法的执行效率要尽量高效,针对较长的文本,也能快速地...
  • 数据结构之哈希算法

    千次阅读 2019-01-22 13:53:11
    此文是数据结构和算法之美学习笔记 ...对输入的数据非常敏感,哪怕原始数据只是修改了一个bit,最后得到的哈希值也大形同 对不同的原始数据哈希值相同的概率要非常小,散列冲突的概率要很小。 哈希...
  • 对输入敏感,哪怕原始数据只修改一个Bit,最后得到的哈希值也大相同。 ③散列冲突: 散列冲突的概率要很小,对于不同的原始数据哈希值相同的概率非常小。 ④执行效率: 哈希算法的执行效率要尽量高效,针对较长...
  • 哈希算法的定义是将任意长度的二进制值串映射为固定长度的...2.对输入数据非常敏感,哪怕原始数据只修改了一个Bit,最后得到的哈希值也大相同。 3.散列冲突的概率要很小,对于不同的原始数据哈希值相同的概率非...
  • 2、对输入数据非常敏感,原始数据即使只修改一个bit,最后得到的哈希值也大相同 3、散列冲突的概率要很小 4、执行效率要尽量高效,针对较长文本,能快速计算哈希值 哈希算法的应用 根据鸽巢原理,哈希算法无法做到...
  • 基于哈希表给出以下问题的解决方案...将该文件先分1000次访问,每次访问时依次将所访问的IP地址用哈希函数进行计算其哈希值,因为再次要将其切分为1000份,所以用计算得到的哈希值对1000进行取模,取模得到0的放的0...
  • 1. 哈希算法 如何防止数据库中的用户信息被脱库? 你会如何存储用户密码这么重要的数据吗?...从哈希值不能反向推导出哈希值(所以哈希算法也叫单向哈希算法)。 篡改无效: 对输入敏感,哪怕原始数据只修改一个Bit
  • 算法与数据结构之美—哈希算法哈希算法应用安全加密唯一标识数据校验散列函数负载均衡数据分片1、如何统计“搜素关键词”...从哈希值不能反向推导出原始数据; 对于输入数据敏感,哪怕只改变了一个bit,最后得到的哈...
  • 数据结构学习笔记七(哈希算法)

    千次阅读 2018-12-24 22:15:18
    一、什么是哈希算法 &nbsp;&nbsp;&nbsp;...从哈希值不能反向推导出原始数据(所有哈希算法也叫做单向哈希算法) 对输入数据非常敏感,哪怕只是修改了一个bit,最后得到的哈希值也大...
  • 数据结构之哈希

    千次阅读 2013-11-17 14:24:37
    哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。实际上,这...
  • 文章目录什么是哈希算法?应用一:安全加密应用二:唯一标识应用三:数据校验应用四:散列函数...从哈希值不能反向推导出原始数据(所以哈希算法也叫单向哈希算法); 对输入数据非常敏感,哪怕原始数据只修改了一个 Bi
  • 数据结构-哈希

    2020-07-29 10:01:26
    哈希表,是一种以空间换取时间的数据结构; 哈希表是怎么建立的     我们通过对需要存储的(value)设定一个函数(规则),计算出一个key(地址),然后把value放到key里
  • 哈希
  • 哈希算法

    千次阅读 2019-11-07 15:39:56
    哈希算法(上):如何防止数据库中的用户信息被脱库? 1.什么是哈希算法 1).任意长度的二进制值串映射为固定长度的二...对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大相同; 散列冲...
  • 本以为做葡萄城杯是我最后一次用Java来写程序,现在看来只能说世事无常,我们永远知道明天会发生什么,就像我无论如何也没想到一心想利用暑假时间好好看Linux C,最终却玩上Java一样。是的我没有写错,后者比起...
  • 哈希文件

    千次阅读 2011-12-17 00:35:47
    在大多数查找方法中(如顺序查找、折半查找、分块查找等),其查找的过程中都需要依据关键字进行若干次的比较判断,最后确定在数据集合中是否存在关键字等于某个给定的记录以及该记录在数据所形成的表中的位置,...
  • 数据结构-哈希

    2017-08-29 15:20:36
    哈希表也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构,它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。哈希表...
  • 哈希算法的定义和原理 将任意长度的二进制串映射为固定长度的二进制...对输入数据非常敏感,哪怕原始数据只修改了一个 Bit,最后得到的哈希值也大相同; 散列冲突的概率要很小,对于不同的原始数据哈希值相同...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,223
精华内容 51,689
关键字:

哈希值数据文件不存在