哈希

大白话科普区块链原理【子豪兄区块链讲义】

限于喜欢 提交于 2019-12-02 02:43:56
用大白话和可视化展示区块链基本原理、共识机制、虚拟货币、挖矿原理、智能合约,区块的产生与溯源及应用场景,并教你如何上传信息到以太坊主链上,并发行自己的数字代币。用可视化网页制作区块链,演示区块链中的哈希加密、工作量证明、分布式存储基本原理。 让初学者用十分钟时间了解改变世界的区块链技术,并理解为什么区块链能做到去中心化、公开透明、难以篡改、可溯源。 本文配套B站视频:01大白话讲解区块链基本原理 本文配套B站视频:02可视化网页搭建区块链 关注微信公众号 人工智能小技巧 回复 区块链 即可看到所有文章及视频链接、可视化区块链网站、区块链浏览器。 知乎专栏: 人工智能小技巧 ,所有文章欢迎转载! 作者:张子豪(同济大学在读研究生) 2018-11-24发布 文章目录 第一讲 区块链原理 第二讲:可视化网页搭建区块链 第三讲 大白话讲解比特币 第四讲 大白话讲解以太坊 补充内容:趣闻 第一讲 区块链基本原理 区块链ABC 区块链的本质:分布式数据库 区块数据结构 区块链的特点 区块链解决的问题 区块链为什么能保证数据安全 区块链的升级:智能合约 传统的中心化第三方资金托管 智能合约 以太坊:支持智能合约的区块链系统 区块链应用场景 区块链浏览器 比特币浏览器 以太坊浏览器 可视化区块链讲解 哈希256加密算法 单个区块内部的数据结构 单条区块链的形成 分布式区块链——工作量证明

深入浅出区块链——零知识证明

情到浓时终转凉″ 提交于 2019-12-01 22:02:17
引子     隐私保护在区块链领域越来越受到重视,在隐私保护的种种手段中,零知识证明脱颖而出。那么零知识证明到底是什么东西呢?   首先,我们抛出一个问题:如何在不说出秘密的情况下,让对方知道你已经知道了这个秘密? 例子1:用户注册   用户在系统注册时,系统不会保存用户的密码明文,而是保存了密码的哈希值;用户在登录系统时,只需要输入注册时的密码,系统会根据用户输入密码产生的哈希值与系统数据库保存的哈希值进行比对。如果一致,则系统认为—— 当前登录用户知道该账号的密码。   这样, 用户不需要告诉网站密码,就能证明自己的身份。这其实就是一种零知识证明。 例子2:在校大学生实习   A要去公司实习,公司要求A在校所有功课没有挂科,才有资格加入公司。A虽然所有功课都没有挂科,但都在61、62左右徘徊;A不想让公司看到自己的成绩单,于是A委托学校开了一个证明:证明A在校所有功课全部及格。并交到了公司,加入了公司。   这样, A既没有暴露自己的确切考试成绩,又向公司证明自己满足要求 。这其实就是零知识证明。 如何从字面解释“零知识证明”?   零知识证明:零知识,即在证明的过程中不透露任何内情。 通俗的来讲,就是既证明了自己想证明的事情,同时透露给验证者的信息为“零”。 什么是零知识证明?   零知识证明(Zero—Knowledge Proof),是由S.Goldwasser、S

存储引擎

混江龙づ霸主 提交于 2019-12-01 18:48:12
简介 哈希存储引擎 B树(B-tree)存储引擎 LSM树(Log-Structured Merge Tree)存储引擎 存储引擎是存储系统的核心,直接决定了存储系统对外提供的功能和性能。 存储系统基本功能总体上分:写,读。 写又分为:增,删,改。 读又分为:顺序,随机。 存储引擎有:哈希存储引擎,B树(B-tree)存储引 大专栏 存储引擎 擎,LSM树(Log-Structured Merge Tree)存储引擎。 哈希存储引擎 基于哈希表,不支持顺序读,其余基本功能都支持。—常用于键值存储系统中。 B树(B-tree)存储引擎 基于B树,支持所有基本功能。—常用于关系数据库。 LSM树(Log-Structured Merge Tree)存储引擎 支持所有基本功能,通过批量转储技术规避磁盘随机写入问题,广泛应用于互联网后台存储系统。—Google bigtable, LevelDB, Cassandra。 另外,对于某个存储系统,其可以选择任意一种存储引擎,例如,键值存储系统也可使用B树存储引擎。 来源: https://www.cnblogs.com/sanxiandoupi/p/11712886.html

JavaSE小笔记--17(集合3-Set集合)

旧城冷巷雨未停 提交于 2019-12-01 18:29:11
1.HashSet API中Set集合中和Collection集合中的方法一致,没有特殊的方法;主要注重Set集合如何保证元素的唯一不重复 Set集合,无索引;不可以重复;无序(存取不一致);允许包含值为null的元素,但最多只能有一个 向集合添加的顺序是啊a,b,c,d;但是输出的结果是d,b,c,a.所以说Set集合的存取不一致 HashSet如何保证元素的唯一呢? 我们使用Set集合都是需要去掉重复元素的,如果在存储的时候逐个equals()比较,效率较低,哈希算法提高了去重复的效率,降低了使用equals()方法的次数 当 HashSet调用add()方法存储对象的时候,先调用对象的 hashCode()方法得到一个哈希值,然后在集台中查找是否有哈希值相同的对象 *如果没有哈希值相同的对象就直接存入集合 *如果有哈希值相同的对象,就和哈希值相同的对象逐个进行 equals()比较,比较结果为false就存入,true则不存 将自定义类的对象存入 HashSet去重复 类中必须重写 hashCode()和equals()方法 hashCode():属性相同的对象返回值必须相同,属性不同的返回值尽量不同(提高效率) equals():属性相同返回true,属性不同返回false,返回false的时候存储 2.LinkedHashSet 看名字知道它属于HashSet这一"派系的

局部敏感哈希LSH(Locality-Sensitive Hashing)——海量数据相似性查找技术

旧巷老猫 提交于 2019-12-01 17:16:22
一、 前言     最近在工作中需要对海量数据进行相似性查找,即对微博全量用户进行关注相似度计算,计算得到每个用户关注相似度最高的TOP-N个用户,首先想到的是利用简单的协同过滤,先定义相似性度量(cos,Pearson,Jaccard),然后利用通过两两计算相似度,计算top-n进行筛选,这种方法的时间复杂度为 \(O(n^2)\) (对于每个用户,都和其他任意一个用户进行了比较)但是在实际应用中,对于亿级的用户量,这个时间复杂度是无法忍受的。同时,对于高维稀疏数据,计算相似度同样很耗时,即 \(O(n^2)\) 的系数无法省略。这时,我们便需要一些近似算法,牺牲一些精度来提高计算效率,在这里简要介绍一下MinHashing,LSH,以及Simhash。 二、 MinHashing     Jaccard系数是常见的衡量两个向量(或集合)相似度的度量: \[ J(A,B)=\frac {\left | A\cap B \right |}{\left | A\cup B \right |} \]     为方便表示,我们令A和B的交集的元素数量设为 \(x\) ,A和B的非交集元素数量设为 \(y\) ,则Jaccard相似度即为 \()\frac x {(x+y)}\) 。 所谓的MinHsah,即进行如下的操作: 对A、B的 \(n\) 个维度,做一个随机排列(即对索引 \(

对称加密与非对称加密和HTTPS

独自空忆成欢 提交于 2019-12-01 16:25:55
为什么需要加密,因为HTTP是明文传输,不安全。 对称加密 浏览器和服务器使用同一个密钥进行加密和解密。没有该密钥不能获取到传输的内容。看似是正确的没有错误。但是怎么保证该密钥能安全的让双方知道呢,服务器生成密钥发送给浏览器的过程中是有可能被截获该密钥的。有的人可能会想,如果浏览器一开始就有该密码就可以了,但是你想想让浏览器去保存所有HTTPS网站的密钥?这不现实吧。 非对称加密 浏览器和服务器同时拥有公钥和私钥,公钥用来加密,私钥用来解密。公钥是可以在网络中传输的。 过程是这样的: 浏览器拥有公钥A和私钥A',服务器拥有公钥B和私钥B' 浏览器向服务器发送请求时,服务器明文传输公钥B给浏览器。 浏览器用公钥B进行加密发送给服务器,服务器收到后用私钥B'进行解密,因为只有服务器有该密钥B',所以是安全的。 同理,服务器向浏览器传输的道路上用浏览器的公钥加密,浏览器收到后用浏览器的私钥进行解密。 这样两条路的安全都可以保证是安全的了(其实是不安全的) 先抛开非对称加密的不安全性不说来谈谈为什么HTTPS不是用的这种加密? 很简单,这种方式太过于繁琐和耗时,效率不高。而对称加密算法则比这快的多,那么我们可不可以使用两者的结合呢? 非对称加密+对称加密 HTTPS真正采用的是这种加密方式。 大致的过程就是使用非对称加密的方式传送密钥,那么该密钥就是双方就安全的得到了

Python高手必读,做一个精通规则的玩家

倖福魔咒の 提交于 2019-12-01 16:01:10
编程,其实和玩电子游戏有一些相似之处。你在玩不同游戏前,需要先学习每个游戏的不同规则,只有熟悉和灵活运用游戏规则,才更有可能在游戏中获胜。 而编程也是一样,不同编程语言同样有着不一样的“规则”。大到是否支持面向对象,小到是否可以定义常量,编程语言的规则比绝大多数电子游戏要复杂的多。 当我们编程时,如果直接拿一种语言的经验套用到另外一种语言上,很多时候并不能取得最佳结果。这就好像一个 CS(反恐精英) 高手在不了解规则的情况下去玩 PUBG(绝地求生),虽然他的枪法可能万中无一,但是极有可能在发现第一个敌人前,他就会倒在某个窝在草丛里的敌人的伏击下。 Python 里的规则 Python 是一门初见简单、深入后愈觉复杂的语言。拿 Python 里最重要的“对象”概念来说,Python 为其定义了多到让你记不全的规则,比如: 定义了 __str__ 方法的对象,就可以使用 str() 函数来返回可读名称 定义了 __next__ 和 __iter__ 方法的对象,就可以被循环迭代 定义了 __bool__ 方法的对象,在进行布尔判断时就会使用自定义的逻辑 ... ... 熟悉规则,并让自己的代码适应这些规则,可以帮助我们写出更地道的代码,事半功倍的完成工作。下面,让我们来看一个有关适应规则的故事。 案例:从两份旅游数据中获取人员名单 某日,在一个主打新西兰出境游的旅游公司里

SQL 性能优化梳理

本小妞迷上赌 提交于 2019-12-01 13:39:15
先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优化展开。 1 基本概念简述 1.1 逻辑架构 第一层:客户端通过连接服务,将要执行的sql指令传输过来 第二层:服务器解析并优化sql,生成最终的执行计划并执行 第三层:存储引擎,负责数据的储存和提取 1.2 锁 数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写锁。简单提下乐观锁和悲观锁。 乐观锁 ,通常用于数据竞争不激烈的场景,多读少写,通过版本号和时间戳实现。 悲观锁 ,通常用于数据竞争激烈的场景,每次操作都会锁定数据。 要锁定数据需要一定的锁策略来配合。 表锁 ,锁定整张表,开销最小,但是会加剧锁竞争。 行锁 ,锁定行级别,开销最大,但是可以最大程度的支持并发。 但是MySql的存储引擎的真实实现不是简单的行级锁,一般都是实现了多版本并发控制(MVCC)。MVCC是行级锁的变种,多数情况下避免了加锁操作,开销更低。MVCC是通过保存数据的某个时间点快照实现的。 1.3 事务 事务保证一组原子性的操作,要么全部成功,要么全部失败。一旦失败,回滚之前的所有操作。MySql采用自动提交,如果不是显式的开启一个事务,则每个查询都作为一个事务。 隔离级别控制了一个事务中的修改,哪些在事务内和事务间是可见的

为什么要对DLL进行签名

↘锁芯ラ 提交于 2019-12-01 08:16:44
目录 基础了解 什么是强名? 强名的意义是什么? 为什么需要强名?是否所有DLL都需要强名称才能创建? 在实时情况下如何使用强名称 本文链接: link . @(为什么要对DLL进行签名) 曾经在一个项目中,要求您为DLL创建一个强名称,并且为一个项目创建一个强名称,然后编译项目解决方案开始出现奇怪的编译错误。我去过很多次。面对这些问题时,我有些疑问浮出水面。 基础了解 让我们仔细阅读以下基础知识。我们将调查以下内容 组装 加密 散列 数字签名 Assembly: Assembly是用于部署,安全性和版本控制的已编译代码库。EXE和DLL是不同类型的程序集。它由名称,文化,版本和公钥令牌组成。 加密加密是使用算法将信息转换为不可读的过程,并且只能使用称为密钥的特殊信息将不可读的信息转换为可读格式。 它们有两种类型 a) 对称密码学 b) 不对称密码 让我们仅关注非对称密码,因为对称密码是平直的直接密码。 由于使用了一对称为私钥和公钥的密钥,非对称密码技术为加密和解密数据提供了一种非常安全的机制。 **私钥绝不应传递给另一个实体。与公钥相反,它应该被传递。** 私钥由一个实体持有并被安全锁定。永远不要将其传递给另一个实体。公钥是相反的;您可以将公开密钥提供给任何要求它的人。 让我们考虑一个类比,盖茨和史蒂夫希望彼此交流。他们选择非对称方式。盖茨发送带有自动数字挂锁的打开盒子

Python Network Security Programming-1

自古美人都是妖i 提交于 2019-12-01 07:41:57
UNIX口令破解1.程序运行需求: 其中dictionary.txt文件为破解口令的字典文件,passwords.txt文件为临时存放UNIX系统密码的文件 2.程序源码: import crypt # 以hash方式加密的unix口令,的一般形式为:HXajgneuer/jids 其中前两位“HX”一般称为salt ,剩下的字符不影响哈希结果 # salt是此哈希的盐值,长度是8位,超过8的后面的位数将不影响哈希的结果。 # 在正常情况下,进行加密的时候,这个盐值是随机字符串。 def testPass(cryptPass): # 根据字典通过crypt函数判断密码 salt = cryptPass[0:2] # 读哈希值得前两位 dictFile = open('dictionary.txt','r') for word in dictFile.readlines(): word = word.strip('\n') # 清除头尾空格,回车符等 # print(word,salt) cryptWord = crypt.crypt(word,salt) #使用字典数据利用crypt函数构造密码 # print(cryptWord,cryptPass) if cryptWord==cryptPass: print("[+] Found Fassword: " + word + "