区块链的发展历程

一、区块链基础技术的发展历程

区块链的诞生与密码学和分布式计算的发展有着重要的联系。

1976年,迪菲(Whitfield Diffie)和赫尔曼(Martin Hellman)发表了一篇开创性的论文《密码学的新方向》(New Directions in Cryptography),这篇论文覆盖了现代密码学的主要研究方向,涵盖非对称加密、椭圆曲线算法、哈希等内容,首次提出公共密钥加密协议与数字签名概念,构成了现代互联网中广泛使用的加密算法体系的基石。同时,这也是加密数字货币和区块链技术诞生的技术基础。

同年,哈耶克(Friedrich August von Hayek)出版了《货币的非国家化》。他从经济自由主义出发,认为竞争是市场机制发挥作用的关键,而政府对货币发行权的垄断对经济的均衡造成了破坏,通过研究竞争货币制度的可行性和优越性,他提出非主权货币(货币非国家化)、竞争发行(由私营银行发行竞争性的货币,即自由货币)等概念,从理论层面引导去中心化加密数字货币技术的发展。

1977年4月,罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)参加了犹太逾越节的聚会,喝了些酒。回到家后李维斯特怎么都睡不着,于是信手翻阅起心爱的数学书来,这时一个灵感从脑海浮现出来,于是连夜整理自己的思路,一气呵成写出了论文A Method for Obtaining Digital Signatures andPublic-Key Cryptosystems,次日李维斯特将论文拿给阿德曼审阅讨论。他已经做好了再一次被击破的心理准备,但这一次阿德曼认输了,认为这个方案应该是可行的。在此之前,阿德曼已经40多次击破李维斯特和萨莫尔的算法。按照惯例,李维斯特按姓氏字母顺序将三人的名字署在论文上,也就是李维斯特、萨莫尔、阿德曼。这篇论文提出了大名鼎鼎的RSA算法,RSA是一种非对称加密算法,后来在数字安全领域被广泛使用,这一工作成果被认为是《密码学的新方向》的延续。

1979年,默克尔(Ralph Charles Merkle)提出了Merkle-Tree数据结构和相应的算法,现在被广泛用于校验分布式网络中数据同步的正确性,对密码学和分布式计算的发展起着重要作用,这也是比特币中用来做区块同步校验的重要手段。默克尔是《密码学的新方向》的两位作者之一赫尔曼的博士生(另一位作者迪菲是赫尔曼的研究助理),实际上《密码学的新方向》就是默克尔的博士生研究方向。

1982年,莱斯利·兰伯特(Leslie Lamport)提出拜占庭将军问题,并证明了在将军总数大于3f,背叛者个数小于等于f时,忠诚的将军们可以达成一致,标志着分布式计算理论和实践正逐渐走向成熟。莱斯利·兰伯特指出,在存在消息丢失风险的不可靠信道上,通过消息传递的方式达到一致性是不可能的,因此,分布式一致性的研究一般假定信道是可靠的。拜占庭将军问题是分布式对等网络通信容错问题。最初的版本如下:拜占庭帝国的将军们计划攻打另一个强大的国家多米诺,采取的战略是兵分十路围攻多米诺。每个将军带领军队驻扎下来,等待最后进攻时刻。十支部队相距甚远,只能依靠信使传递消息达成共识。将军中可能有叛徒,忠诚的将军们希望通过某种协议达成行动的共识(进攻或撤退),叛徒会通过发送错误消息阻挠忠诚的将军达成一致。在分布式计算中,不同的计算机通过通信交换信息达成共识而按照同一套协作策略行动。有时候,系统中的成员可能出错或故意发送错误信息,用于传递信息的通信网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。拜占庭将军问题被认为是容错性问题中最难的问题之一。

同年,大卫·乔姆(David Chaum)公布了密码学支付系统ECash,随着密码学的发展,具有远见的加密数字货币先驱们开始尝试将其运用到货币、支付相关领域,ECash是加密数字货币最早的先驱之一。

1985年,尼尔·科布利茨(Neal Koblitz)和维克托·米勒(Victor Miller)各自独立发明了著名的椭圆曲线加密算法(Elliptic Curve Cryptography,ECC)。由于RSA的算法计算量大实际落地时遇到困难,ECC的提出极大地推动了非对称加密体系真正进入生产实践领域并发挥出巨大影响。ECC算法标志着现代密码学理论和技术开始走向更加普遍的应用。

1993年,尼克·萨博(Nick Szabo)提出了智能合约(Smart Contract),萨博希望创造一种由多个约定构建的合同,包括让各方履行这些约定的协议,淘汰掉“无生命的纸质合同”。他认为,数字革命正在加速改变人与人之间的联系,并为利用这些联系形成新机构或应用服务提供了方法。

1997年,亚当·贝克(Adam Back)提出了Hashcash算法,用于解决垃圾邮件(EmailSpam)和DoS(Denial-of-Service)攻击问题,Hashcash是一种PoW算法,后来被比特币系统采纳。

1998年,华裔工程师戴伟(Wei Dai)和尼克·萨博各自独立提出加密数字货币的概念,其中戴伟的B-Money被公认为比特币的精神先驱,而萨博的比特黄金(BitGold)设想基本就是比特币的雏形,以至于至今仍有人怀疑萨博就是中本聪,但被萨博本人否定了。

21世纪初,点对点分布式网络技术飞速发展,先后诞生了Napster、BitTorrent等流行软件系统,为加密数字货币的实现夯实了技术基础。

2008年11月,神秘的中本聪发表了论文,描述了一种完全去中心化的加密数字货币——比特币,而区块链则作为其底层技术进入公众视野。经过10余年的发展,区块链技术正逐渐成为最有可能改变世界的技术之一。

2013年,以太坊区块链诞生,尼克·萨博在1993年提出的智能合约愿景得以实现。自诞生以来,以太坊已发展成为全球第二大区块链,其开发者一直在探索数字时代的发展方向。

 

二、区块链平台的发展历程

区块链的发展先后经历了加密数字货币、企业应用、价值互联网三个阶段。下面将分别对这几个阶段进行简要的介绍。

区块链1.0:加密数字货币

2009年1月,在比特币系统论文发表两个月之后,比特币系统正式运行并开放了源码,标志着比特币网络的正式诞生。通过其构建的一个公开透明、去中心化、防篡改的账本系统,比特币开展了一场规模空前的加密数字货币实验。在区块链1.0阶段,区块链技术的应用主要聚集在加密数字货币领域,典型代表即比特币系统以及从比特币系统代码衍生出来的多种加密数字货币。

加密数字货币的“疯狂”发展吸引了人们对区块链技术的关注,对区块链技术的传播起了很大的促进作用,人们开始尝试在比特币系统上开发加密数字货币之外的应用,比如存证、股权众筹等。但是比特币系统是一个为加密数字货币设计的专用系统,存在以下的问题使得基于比特币系统开发应用并不适用:

  • 比特币系统内置的脚本系统主要针对加密数字货币交易而专门设计,不是图灵完备的脚本,表达能力有限,因此在开发诸如存证、股权众筹等应用时有些逻辑无法表达。在比特币系统内部做大量的开发,对于开发人员来说要求高、难度大,因此无法基于比特币系统构建大规模的非加密数字货币类的应用。
  • 比特币系统在全球范围内只能支持每秒7笔交易,交易记账后追加6个区块才能比较安全地确认交易,追加一个块大约需要10分钟,意味着大约需要1小时才能确认交易,不能满足实时性要求较高的应用的需求。

区块链2.0:企业应用

针对区块链1.0存在的专用系统问题,为了支持如众筹、溯源等应用,区块链2.0阶段支持用户自定义的业务逻辑,即引入了智能合约,从而使区块链的应用范围得到了极大拓展,开始在各个行业迅速落地,极大地降低了社会生产消费过程中的信任和协作成本,提高了行业内和行业间协同效率,典型的代表是2013年启动的以太坊系统。同时,针对区块链1.0阶段存在的性能问题,以太坊系统从共识算法、分片等角度进行了提升。

(1)智能合约

以太坊项目为其底层区块链账本引入了被称为智能合约的交互接口,对区块链应用进入2.0时代发挥了巨大作用。智能合约是一种通过计算机技术实现的旨在以数字化方式达成共识、履约、监控履约过程并验证履约结果的自动化合同,极大地扩展了区块链的功能。

从人类分工协同的角度来看,现代社会已经是契约社会,而契约的可信签订和可靠执行往往需要付出高昂的成本。

以公司合同为例,小强机器人和小明机械签订了一笔供货合同,后来小明机械违反了合同条款,导致小强机器人供货不足产生重大损失,于是小强机器人向法院提起诉讼,在历经曲折并耗费大量人力、物力后终于打赢了官司。不料小明机械拒绝履行判决,小强机器人只得向法院申请强制执行,从立案、提供人证物证到强制执行,整个流程浪费了大量社会资源。

而通过智能合约,整个履约过程将变得简单、高效、低成本。小强机器人和小明机械签订了一笔供货合同,合同以智能合约的形式通过计算机程序编码实现,经过双方确认后,供货智能合约连同预付违约金账户被安装到区块链平台上自动执行,后来小明机械违反了合同条款,导致小强机器人供货不足产生重大损失,小强机器人提供电子证据并通过平台真实性验证后触发供货智能合约的违约赔偿条款,违约赔偿条款自动将小明机械预付的违约金按照合约规定汇入小强机器人账户作为补偿。

有了智能合约系统的支持,区块链的应用范围开始从单一的加密数字货币领域扩大到涉及合约共识的其他金融领域,区块链技术首先在股票、清算、私募股权等众多金融领域崭露头角。比如,企业股权众筹一直是众多中小企业的梦想,区块链技术使之成为现实。区块链分布式账本可以取代传统的通过交易所的股票发行,这样企业就可以通过分布式自治组织协作运营,借助用户的集体行为和集体智慧获得更好的发展,在投入运营的第一天就能实现募资,而不用经历复杂的IPO流程,产生高额费用。

(2)性能改进

各种区块链系统采用不同的共识方法以提升区块链的性能。比如,以太坊采用改进的工作量证明机制将出块时间缩短到了15秒,使得每秒能够处理30笔交易,从而能够满足绝大多数的应用。2020年发布的以太坊2.0拟从多角度进一步提升区块链性能。首先,以太坊2.0采用PoS共识算法替换原来的PoW共识算法,这种算法大大地降低了能量的消耗,同时提高了共识的速度。其次,以太坊2.0还将采用信标链协同分片链的方式提升以太坊的扩展性,解决了区块链长期以来被诟病的扩展性问题。经过2.0的优化,未来以太坊能够支持每秒10万笔交易的吞吐量。

随着区块链2.0阶段智能合约的引入,其“开放透明”“去中心化”及“不可篡改”的特性在其他领域逐步受到重视。各行业专业人士开始意识到,区块链的应用也许不仅局限在金融领域,还可以扩展到任何需要协同共识的领域中去。于是,在金融领域之外,区块链技术又陆续被应用到了公证、仲裁、审计、域名、物流、医疗、邮件、鉴证、投票等其他领域,应用范围逐渐扩大到各个行业。

(3)区块链3.0:价值互联网

2018年5月28日,***在中国科学院发表讲话,“进入21世纪以来,全球科技创新进入空前密集活跃的时期,新一轮科技革命和产业变革正在重构全球创新版图、重塑全球经济结构。以人工智能、量子信息、移动通信、物联网、区块链为代表的新一代信息技术加速突破应用”,表示区块链是“新一代信息技术”的一部分。

2019年10月24日,***在中央政治局第十八次集体学习会上强调,把区块链作为核心技术自主创新的重要突破口,加快推动区块链技术和产业创新发展,要构建区块链产业生态,加快区块链和人工智能、大数据、物联网等前沿信息技术的深度融合,推动集成创新和融合应用,发挥区块链在促进数据共享、优化业务流程、降低运营成本、提升协同效率、建设可信体系等方面的作用。

从技术的角度来看,应用CA认证、电子签名、数字存证、生物特征识别、分布式计算、分布式存储等技术,区块链可以实现一个去中心、防篡改、公开透明的可信计算平台,从技术上为构建可信社会提供了可能。区块链与云计算、大数据和人工智能等新兴技术交叉演进,将重构数字经济发展生态,促进价值互联网与实体经济的深度融合。

虽然区块链已在众多行业中逐步落地应用,但是各行业的区块链应用还是彼此相互独立,价值只能在自身区块链内流转,形成一座座“数据孤岛”。区块链3.0的目标是打破这个现状,将这些“数据孤岛”联结起来,形成一张互联的价值网络。

价值互联网是一个可信赖的实现各个行业协同互联,实现人和万物互联,实现劳动价值高效智能流通的网络,主要用于解决人与人、人与物、物与物之间的共识协作效率提升问题,将传统的依赖于人或依赖于中心的公正、调节、仲裁功能自动化,按照大家都认可的协议交给可信赖的机器来自动执行。通过对现有互联网体系进行变革,区块链技术将与5G网络、机器智能、物联网等技术创新一起承载着我们的智能化可信赖梦想飞向价值互联网时代。

30年前,万维网之父Tim Berners Lee创建了万维网,给世界带来了划时代的变革。30年之后的今天,Tim Berners Lee正在打造一个名为Solid的项目,旨在从根本上改变当前Web应用的工作方式,改善隐私,让用户真正拥有数据控制权,用户可以选择如何将这些数据用于获利,从而获得公平、安全的互联网体验。而自带密码学和去中心化属性的区块链技术在分布式身份体系的构建中具备天然优势。互联网先驱们正在积极探索如何通过区块链技术解决现有Web协议存在的效率低下、版本变更、中心化和骨干网依赖等问题,现阶段称其必将取代HTTP尚为时过早,但当前作为万维网协议的补充是非常有益的。

在即将到来的智能价值互联时代,区块链将渗透到生产生活的方方面面,充分发挥审计、监控、仲裁和价值交换的作用,确保技术创新向着让人们的生活更加美好、让世界更加美好的方向发展。

 

本文转载于网络 如有侵权请联系删除

相关文章

  • https httppost ssl单向验证,json格式传输 java案例

    大家好,又见面了,我是你们的朋友全栈君。packageutil; importjava.io.FileInputStream; importjava.io.IOException; importjava.security.KeyStore; importjava.security.cert.X509Certificate; importjavax.net.ssl.SSLContext; importjavax.net.ssl.SSLException; importjavax.net.ssl.SSLSession; importjavax.net.ssl.SSLSocket; importjavax.net.ssl.TrustManager; importjavax.net.ssl.TrustManagerFactory; importorg.apache.commons.httpclient.HttpException; importorg.apache.http.HttpEntity; importorg.apache.http.HttpResponse; importorg

  • 2014腾讯实习笔试面试

    成都这边14年的软件开发笔试题延续了一贯的传统,还是考查数据结构、操作系统、计算机网络等方面的内容,只是槽点还是非常多的,首先就是笔试挨着坐,博主的左边就是同班同学(我没偷看啊!),考试的时候还有同学讨论题该怎么做(给跪了),然后题目据说照搬了往年的题,这个我不太清楚。从笔试的情况来看,笔试基本是不卡人的,所以大部分同学都收到了初面通知。一面遇到的面试官比較nice,先介绍自己,然后让介绍做过的项目,基础知识仅仅问了一个innerjoin和leftjoin的差别,居然还问了有没有女朋友的问题。其它同学一面问题呈上:1、写字符串反转程序;2、利用宏定义比較两个数较大的值并返回;3、a=(int)((int*)0+4)求a是多少(答案好像是16吧?);4、写一下归并、插入…等排序程序。一面尽管比較水,可是卡掉了大部分人,目測通过比例5:1的样子。师弟刚给了包槟榔,尽管吃不惯但还是要感谢一下^_^。二面的面试官应该是技术总监,还是自我介绍,然后问你的技术比别人强在哪里,后面还是介绍做过的项目,只是期间问的问题多多了。1、hashtable原理;2、简述web从前端到后端的处理流程;3、web

  • 初探webpack之编写plugin

    初探webpack之编写pluginwebpack通过plugin机制让其使用更加灵活,以适应各种应用场景,当然也大大增加了webpack的复杂性,在webpack运行的生命周期中会广播出许多事件,plugin可以hook这些事件,在合适的时机通过webpack提供的API改变其在处理过程中的输出结果。描述webpack是一个现代JavaScript应用程序的静态模块打包器modulebundler,当webpack处理应用程序时,它会递归地构建一个依赖关系图dependencygraph,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle。 使用webpack作为前端构建工具通常可以做到以下几个方面的事情:代码转换:TypeScript编译成JavaScript、SCSS编译成CSS等。文件优化:压缩JavaScript、CSS、HTML代码,压缩合并图片等。代码分割:提取多个页面的公共代码、提取首屏不需要执行部分的代码让其异步加载。模块合并:在采用模块化的项目里会有很多个模块和文件,需要构建功能把模块分类合并成一个文件。自动刷新:监听本地源代码的变化,自

  • DataSourceAutoConfiguration 解析(2)

    DataSourceAutoConfiguration解析(1)初始化DataSourceProperties配置文件2.1初始化DataSourceProperties配置文件如果设置的不是内置数据库的话:1)必须配置的有:url,username,password2)数据库名不是必须的3)driverClassName不是必须的:可以从url中推导出4)type不是必须的:可以从上下文中推导出如果设置的是内置数据库的话:1)必须配置的有:引入内置数据库依赖,如:H22)其它所有的都可以不配置(有默认的配置),如果随意配置,可能产生冲突@ConfigurationProperties(prefix="spring.datasource") publicclassDataSourcePropertiesimplementsBeanClassLoaderAware,InitializingBean{ privateClassLoaderclassLoader; //数据库名:如果使用内置数据库,默认为testdb privateStringname; //Whethe

  • AtCoder Beginner Contest 154

    A.题意:看输入输出即可redblue 34 red复制24复制思路:这个题不是很难,但是我一上去就想要用map,然后就很悲催,map里面人家按照键值给你排序,所以输出的时候会有错!#include<bits/stdc++.h> #definepair<string,int>p usingnamespacestd; map<string,int>st; intmain(){ strings1; strings2; cin>>s1>>s2; intn,m; cin>>n>>m; //st.insert(p(s1,n)); //st.insert(p(s2,m)); st[s1]=n; st[s2]=m; stringss; cin>>ss; st[ss]--; //map<string,int>::iteratorit for(autoit=st.begin();it!=st.end();it++){ //cout<<it->first&

  • 微服务-高并发情况下接口降级和熔断策略

    介绍一下降级和熔断的概念什么是降级呢?降级意味着多种方案,当系统出现问题的时候,你有一个备选方案可以马上切换,比如有一个接口的功能是实时预测未来一个月某个商品的采购数量,突然间依赖的上游系统出现问题了,那么我们的接口就完全不可用了吗?显然这是不应该的,这时我接口就可以降级,返回昨天实时计算出来的结果,虽然准确性可能差一点,但系统能够正常运转,降级也分为自动降级和手动降级,前者是系统自动检测到问题时自动切换,后者是系统检测到问题报警,人为的切换,降级代表着系统相比降级之前其功能表现不如之前的完美(这个具体体现在功能准确性,可用性上等,如上面接口的例子)什么是熔断呢?通俗来讲,熔断指的是遇到危险了,必须马上停掉,比如生活中的电流过大,必须马上切断,否则就发生了火灾了,熔断之后就会导致断电,完全不可用,在一个系统中,假设一个接口部署了10台机器(分布式),突然某一台机器的接口调用情况正确率降到90%,那么这台机器肯定出现问题了,这个时候就需要熔断这台机器,把这台机器从整个集群中摘掉,从而保证用户的请求100%的正确,再比如,一个系统中有很多功能,这些功能有些是核心功能,有些是非核心功能,那么

  • Java DateTimeUtils 工具类

    DateTimeUtilsJava中对时间和日期操作的工具类源码如下:importjava.text.DateFormat; importjava.text.SimpleDateFormat; importjava.time.LocalDateTime; importjava.time.ZoneOffset; importjava.time.format.DateTimeFormatter; importjava.util.Calendar; importjava.util.Date; /** *<p>Title:DateTimeUtils</p> *<p>Description:</p> *<p>Url:http://www.work100.net/tools/code-java/datetime-utils.html</p> * *@authorliuxiaojun *@date2020-02-0220:26 *-------------------History------------------- *&l

  • 程序员都干了什么活

    01写代码—IDE有一点很重要:代码在编译前就只是文字而已。前面提过,你可以用记事本或任何文字处理器,有人确实这样做。但一般来说,现代软件开发者会用专门的工具来写代码,工具里集成了很多有用功能帮助写代码,整理,编译和测代码。因为集成了所有东西,因此叫集成开发环境,简称IDE。所有IDE都有写代码的界面,还带一些有用功能,比如代码高亮,来提高可读性。许多IDE提供实时检查,比如拼写。大型项目有很多源代码文件,IDE帮助开发者整理和看代码。很多IDE还可以直接编译和运行代码,如果程序崩了,因为你还没写完呢。IDE可以定位到出错代码,还会提供信息帮你解决问题,这叫调试(debug)。02调试(debug)调试很重要,大多数程序员会花70%~80%时间调试,而不是在写代码,好工具能极大帮助程序员防止和解决错误。很多开发者只用一款IDE——VIM才是最棒的编辑器(如果你知道怎么退出的话)。03写文档除了写代码和调试,程序员工作的另一个重要部分是给代码写文档,文档一般放在一个叫README的文件里,告诉其他程序员,看代码前先看这个文件。文档也可以直接写成"注释",放在源代码里,

  • 聊聊sharding-jdbc的XATransactionManager

    序本文主要研究一下sharding-jdbc的XATransactionManagerXATransactionManagerincubator-shardingsphere-4.0.0-RC1/sharding-transaction/sharding-transaction-2pc/sharding-transaction-xa/sharding-transaction-xa-spi/src/main/java/org/apache/shardingsphere/transaction/xa/spi/XATransactionManager.javapublicinterfaceXATransactionManagerextendsAutoCloseable{ /** *InitializeXAtransactionmanager. */ voidinit(); /** *Registerrecoveryresource. * *@paramdataSourceNamedatasourcename *@paramxaDataSourceXAdatasource */ voidr

  • 二叉树的非递归遍历

    一.二叉树的非递归前序遍历publicstaticvoidpreOrderUnRecur(TreeNoderoot){ if(root==null)return; Stack<TreeNode>stack=newStack<>(); stack.add(root); while(!stack.isEmpty()){ TreeNodetemp=stack.pop(); System.out.print(temp.val+""); if(temp.right!=null){ stack.add(temp.right); } if(temp.left!=null){ stack.add(temp.left); } } }复制二.二叉树的非递归中序遍历publicstaticvoidinOrderUnRecur(TreeNoderoot){ if(root==null)return; Stack<TreeNode>stack=newStack<>(); while(!stack.isEmpty()||root!=null){

  • 【RL-TCPnet网络教程】第15章 RL-TCPnet之创建多个TCP连接

    第15章    RL-TCPnet之创建多个TCP连接本章节为大家讲解RL-TCPnet的TCP多客户端实现,因为多客户端在实际项目中用到的地方还挺多,所以我们也专门开启一个章节做讲解。另外,学习本章节前,务必要优先学习第14章TCP客户端。学会创建一个TCP客户端了,创建多个客户端是一样的。本章教程含STM32F407开发板和STM32F429开发板。15.1 初学者重要提示1、学习本章节前,务必保证已经学习了第12章的TCP基础知识和第14章的TCP客户端。2、相比前面章节的TCP服务器,TCP客户端的测试要稍麻烦些,例子中默认访问的TCP服务器端IP地址是192.168.1.2,端口号1001。大家测试时要根据自己电脑的实际IP地址设置app_tcpnet_lib.c文件中远程IP和端口。具体测试方法详看本章节的15.6小节。15.2 创建多个TCP客户端连接服务器本章节为大家讲解一个多TCP客户端连接服务器的实例,因为实际项目中,这种情况还比较多,所以也作为一期教程进行专门的讲解。有了上期教程的基础,本期教程也比较好实现,用户仅需多创建几个TCP客户端,并配置Net_Confi

  • Tor代理通过替换比特币地址将勒索赎金归为己有

    概要近日,Proofpoint的安全研究人员发现了一种新的窃取他人比特币的方法,即利用Tor代理(onion[.]top)来窃取比特币。据了解,该代理运营商通过修改用于支付的网页来源,偷偷地将由勒索软件作者控制的比特币地址换成自己的比特币钱包地址。背景:Tor代理大部分勒索软件都会要求受害者向其支付一定的赎金,而想要完成支付受害者往往需要访问Tor.onion类型的网站。由于大多数用户通常都没有安装Tor浏览器,因此他们可能会使用Tor代理,一些勒索软件在勒索提示信息中也会建议受害者使用Tor代理。Tor代理是将Tor流量转换为正常网络流量的常规网站。然而,使用Tor代理并不安全。由于Tor代理运营商掌控着代理服务器的所有权,因此所有的网页来源都有可能被运营商拦截和替换。Tor代理的使用也非常简单。用户只需在nionURL后添加一个简单的扩展后缀,即可实现在普通常规浏览器中的洋葱访问。例如访问:hxxps://robusttldkxiuqc6[.]onion/,使用Tor代理就可以在任何浏览器中以该格式访问:hxxps://robusttldkxiuqc6[.]onion[.]to/。

  • mysql锁排查

    一、说明 本文将通过实验介绍mysql锁该如何排查,本实验的mysql版本为8.0.23,隔离级别为RC。 二、实验 场景一:会话a开启事务,删除全部数据。会话b开始事务,删除部分数据 会话A: (root@localhost)[hello]>begin; (root@localhost)[hello]>deletefromx1; (root@localhost)[hello]>deletefromx2; (root@localhost)[hello]>select*fromx1; (root@localhost)[hello]>select*fromx2; 复制 会话B: (root@localhost)[hello]>begin; (root@localhost)[hello]>deletefromx1limit1;#此处发生等待 复制 再起一个窗口,查看会话列表 ID34即会话A已执行完成,状态为Sleep。ID37即会话B正在执行,状态为Query。 (root@localhost)[(none)]>select*frominfo

  • iis6手工创建网站后无法运行php脚本

    给人搬了十几个网站,老站用西部数码建站助手创建的,现在过期了无法继续创建,只能在Internet信息服务(IIS)管理器创建网站,创建下来都没问题,但是就是无法打开网站。 测试打开txt文档、静态页面都能打开,一到打开php文件就直接就挂了,无法打开,什么报错都没有。 之前有用iis6以外的服务器创建过网站,都是直接创建就可以运行。 没报错不好找问题,百度用别人的方法操作也不行。实在没办法,只能对着之前用建站助手创建的网站配置,放下架子,一个个看过去,结果发现用建站助手创建的网站ISAPI拓展配置信息不同。 建站助手创建的老站配置信息是: 我手工创建的网站配置信息是: (截图时候我加进去了) 少了PHPFastCGI的可执行路径,复制了配置信息,网站分分钟跑起来了。 本人博客:iis6手工创建网站后无法运行php脚本 分享到: QQ空间 新浪微博 腾讯微博 微信 更多

  • window server2016服务器激活方法(简单快速,亲测可用)

        1.打开cmd控制台,按顺序输入以下命令,有报错不要管它。 slmgr/upk slmgr.vbs/ipkCB7KF-BWN84-R7R2Y-793K2-8XDDG slmgr.vbs/skmskms.lotro.cc slmgr.vbs/ato链接参考:https://blog.csdn.net/liuxiangyang_/article/details/85339611复制 我的小鱼你醒了, 还认识早晨吗? 昨夜你曾经说, 愿夜幕永不开启。 初吻吻别的那个季节, 不是已经哭过了吗? 你的香腮边轻轻滑落的, 是你的泪,还是我的泪。 我的指尖还记忆著, 你慌乱的心跳。 温润的体香里, 那一缕长髮飘飘。 ——青青树《魁拔》 交流群:ASP.NET交流群(2群)58189568 ExtJs4.2交流群(3群)97869295

  • 更改Bam文件染色体名字

    更改Bam文件染色体名字 本文作者:Sunny-King 发布时间:2022-08-1910:53:42星期五 本文链接:https://www.cnblogs.com/Sunny-King/p/Bioinformatics-Bam_reheader.html 最近遇到一个bam文件格式的问题,拿到的bam种染色体是1、2、3...不带chr的,而已知信息是chr1、chr2、等格式,为了同一个是,我们利用samtools将ban文件格式统一更改为chr1等格式。下面介绍一下具体实现过程。 一、添加chr 1、从原始ban种提取header samtoolsview-Hinput.bam>header.sam 复制 2、将header中的序列信息全部添加chr sed'/^@SQ/{s/SN:\([0-9XY]\)/SN:chr\1/g;s/SN:MT/SN:chrM/g}'header.sam>new.header.sam 复制 bam文件的header中@SQ开头的行用以存储序列信息,在更改时需匹配到@SQ,然后将核染色体添加chr,而线粒体由MT更改为chrM

  • 《LINUX内核设计与实现》第三周读书笔记——第一二章

    《Linux内核设计与实现》读书笔记——第一二章 20135301张忻 估算学习时间:共2小时 读书:1.5 代码:0 作业:0 博客:0.5 实际学习时间:共2.5小时 读书:2.0 代码:0 作业:0 博客:0.5 耗时估计的公式:Y=X+X/N,Y=X-X/N 第一章Linux内核简介 1.1Unix的历史 由于Unix系统设计简洁并且在发布时提供源代码,所以许多其他组织和团体都对它进了进一步的开发。 Unⅸ虽然已经使用了40年,但计算机科学家仍然认为它是现存操作系统中最强大和最优秀的系统。从1969年诞生以来,由DennisRitchie和KenThompson的灵感火花点亮的这个Unix产物已经成为一种传奇,它历经了时间的考验依然声名不坠。 1.2追寻Linus足迹:Linux简介 1.3操作系统和内核简介 处理器在任何指定时间点上的活动范围可以概括为下列三者之一: 运行于内核空间,处于进程上下文,代表某个特定的进程执行。 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。 运行于用户空间,执行用户进程。 1.4Linux内核和传统Unix内核的比

  • 正则替换请求头字典

     

  • Java GC机制和对象Finalize方法的一点总结

    GC是垃圾收集的意思(GarbageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的。       有向图垃圾回收机制 .NET的垃圾回收采用引用计数,java的垃圾回收机制采取的是有向图的方式来实现,具体的说,java程序中的每个线程对象就可以看作是一个有向图的起点,有向边从栈中的引用者指向堆中的引用对象。在这个有向图中,如果一个对象和根节点之间是可达的,那么这个对象就是有效的,反之,这个对象就是可以被回收的。采取这样一种机制的优点是可以有效的避免循环引用。   当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通过有向图机制确定哪些对象是"可达的",哪些对象是"不可达的".当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。       GC在JVM中通常是由一个或一组线程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CP

  • 前后端交互实现(nginx,json,以及datatable的问题相关)

    1.同源问题解决 首先,在同一个域下搭建网络域名访问,需要nginx软件,下载之后修改部分配置    然后再终端下cmd nginx.exe命令,或者打开nginx.exe文件,会运行nginx一闪而过,在后台运行而且一次是打开两个的,可以在任务管理器控制结束进程, 接下来,你就可以打开8080接口给同域下其他主机访问你的端口。 2.关于ajax使用json进行前后端的post问题   刚开始,因为后端和数据库的交互,传回的data默认写出fields,然后前端我写的ajax格式里的data也想写成fields,结果发现失败,好像不太行,还有一开始以为键值对失效,以为一定要一一对应,后面改了差不多一天,跑了很久,然后问师兄,才知道是json数据格式错误,因为我们一开始以为传递的json数据是列表格式,列表里放字典,结果并不是!!!,json里应该放的是字典!!! 格式大概如下: { url:"/staff/add/", status:200, responseText:{ 'code':'ok', 'message':'sfasd

  • linux 设置目录可以被其他机器挂载 mount

    最近遇到一个需求,想要将服务器A上的目录/var/www/ipxact_log挂载到服务器B上,步骤如下: 在A上进行如下设置 参考:https://www.cnblogs.com/mianbaoshu/p/16280805.html 1.sudovim/etc/exports,添加/var/www/ipxact_log*(insecure,rw,sync,no_root_squash,no_subtree_check) 2.执行exportfs-r使配置立即生效,可能会提醒你安装nfs-kernel-server,如下所示: 我在安装过程中出现了一次紫屏,吓我一跳,回车解决,结果安装后出现以下报错: 先忽略,执行sudoexportfs-r使配置生效 在B上进行如下设置 1.设置开机自动mount,参考https://www.cnblogs.com/mianbaoshu/p/14685246.html ,在/etc/fstab中添加记录192.168.xxx.xxx:/var/www/ipxact_log/var/www/ipxact_log nfsdefau

相关推荐

推荐阅读