精华内容
参与话题
问答
  • 现代密码学的发展与计算机信息技术关系密切,已经发展为包括随机数、Hash 函数、加解密、身份认证等多个课题的庞大领域,相关成果为现代信息系统奠定了夯实的安全基础。 ...完整的安全系统不仅仅需要具备这些算法,更...

    时至今日密码学已经发展了数千年,在公元前的古埃及就出现过使用特殊字符和简单替换形式的密码。近代密码的发展源自第一、二次世界大战对军事机密的保护。现代密码学的发展与计算机信息技术关系密切,已经发展为包括随机数、Hash 函数、加解密、身份认证等多个课题的庞大领域,相关成果为现代信息系统奠定了夯实的安全基础。

    本文主要总结了应用密码学的一些算法。完整的安全系统不仅仅需要具备这些算法,更需要安全的系统环境、物理环境。无论是系统的损坏还是人为的泄密,都非常容易造成安全问题。

    密码学算法的家族成员有哪些呢?

    为了数据的安全性,在编程中,常常用到一些密码学算法。最常用的密码学算法包括以下三大类:哈希算法、加密解密算法、编码解码算法。

    分成这三大类的依据是什么呢?其实这种分类是根据每种算法的最大的核心特性而定的。

    • 哈希算法不可逆;
    • 加密解密算法可逆,但是必须要有密钥;
    • 编码解码算法可逆,无需密钥。

    1、哈希算法(消息摘要Message Digest)

    • 包括:md4、md5、hash1、ripeMD160、SHA256、SHA3、Keccak-256等。

    2、加密解密算法

    • 对称加密算法
    • 包括DES、3DES、AES等。
    • 非对称加密算法
    • 包括RSA算法、椭圆曲线加密算法。
    • 数字签名算法DSA
    • 包括RSA数字签名、椭圆曲线数字签名。

    3、编码解码算法

    • 包括Base64编码与解码、Base58编码与解码。
    展开全文
  • 在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发。 iris框架支持请求数据、模型、持久数据分层处理,并支持各层级模块代码绑定执行。 MVC即:model、view、controller三个...

    在Iris框架中,封装了mvc包作为对mvc架构的支持,方便开发者遵循mvc的开发原则进行开发。

    iris框架支持请求数据、模型、持久数据分层处理,并支持各层级模块代码绑定执行。

    MVC即:model、view、controller三个部分,分别代表数据层、视图层、控制层。控制器层负责完成页面逻辑、实体层负责完成数据准备与数据操作、视图层负责展现UI效果。

    在iris框架中,用一张图表示前端请求、服务端处理请求、服务端返回数据到前端的请求过程图,描述如下:

     

    mvc.Application

    iris框架中的mvc包中提供了Application结构体定义。开发者可以通过注册自定义的controller来使用对应提供的API,其中包含路由组router.Party,以此用来注册layout、middleware以及相应的handlers等。

    iris.mvc特性

    iris框架封装的mvc包,支持所有的http方法。比如,如果想要提供GET,那么控制器应该有一个名为Get()的函数,开发者可以定义多个方法函数在同一个Controller中提供。这里的Get、Post方法是指的直接和八种请求类型同名的方法,mvc模块会自动执行到Get()、Post()等八种对应的方法。如下所示:

    //自定义的控制器
    type CustomController struct{}
    //注册自定义控制器处理请求
    mvc.New(app).Handle(new(CustomController))
    //自动处理基础的Http请求
    //Url: http://localhost:8000
    //Type:GET请求
    func (cc *CustomController) Get() mvc.Result{
      //todo
      return mvc.Response{
          ContentType:"text/html",
      }
    }
    /**
    * Url:http://localhost:8000
    * Type:POST
    **/
    func (cc *CustomController) Post() mvc.Result{
      //todo
      return mvc.Response{}
    }

    根据请求类型和请求URL自动匹配处理方法

    在iris框架中的mvc设计包中,设定了自定义的控制器以后,支持根据请求类型和对应的URL自动匹配对应的处理方法。具体案例如下:

    /**
    * url:http://localhost:8000/info
    * type:GET请求
    **/
    func (cc *CustomController) GetInfo() mvc.Result{
      //todo
    }
    ​
    /**
    * url:http://localhost:8000/login
    * type:POST
    **/
    func (cc *CustomController) PostLogin() mvc.Result{
      //todo
    }

    如上案例,当我们发起请求时,iris框架就能够自动匹配对应的控制器的处理方法。除了上述get和post两个方法之外,http请求的八种类型中的其他请求类型,也支持自动匹配。

    BeforeActivation方法

    在通过Configure和Handle进行了自定义Controller绑定以后,就可以使用自己自定义的Controller来进行自定义处理处理请求方法。开发者可以在BeforeActivation方法中来处理请求定义。如下所示,我们给出案例说明:

    func (m *CustomController) BeforeActivation(a mvc.BeforeActivation){
      a.Handle("GET","/users/info","QueryInfo")
    }
    //对应处理请求的方法
    func (m *CustomController) QueryInfo() mvc.Result{
      //todo
    }

    使用mvc.Configure配置路由组和控制器

    除了使用mvc.new(app)来构建mvc.Application结构体对象和Handle方法来配置处理请求的控制器外,iris框架还支持使用mvc.Configure来配置路由组和控制器的设置。具体使用方法如下:

    mvc.Configure(app.Party("/user"), func(mvc *mvc.Application) {
    mvc.Handle(new(UserController))
    })

    本节课中我们学习了mvc包中控制器极其处理方法的基本用法,在实战项目中,我们会在本节课学习内容的基础上,继续深入学习更详细的操作。

    转载于:https://www.cnblogs.com/coffees/p/10643957.html

    展开全文
  • 2019马哥教育全新Python全栈+自动化+爬虫+数据分析+go区块链+AI全能高薪工程师课程,内容覆盖全面。
  • Java语言在较大的成熟项目上具有优势,但是在区块链开发中确实会有很多短处,比如在协程处理上,还有Java语言本身不够灵活等等,当然选择使用Go主要是因为其在区块链的流行程度。 区块链的流行语言 在区...

    前言

    本人在加入比原链之前一直是做Java开发的,当初看到Go还有点犹豫,还怕过不了面试,结果是否掌握一门语言的考量确实没那么高,我顺利入职比原链,并在半个月内很快掌握Go并能够进行核心项目的开发。

    Java语言在较大的成熟项目上具有优势,但是在区块链开发中确实会有很多短处,比如在协程处理上,还有Java语言本身不够灵活等等,当然选择使用Go主要是因为其在区块链的流行程度。

    区块链的流行语言

    在区块链公链的开发圈子里,我们找到了一些流行的编程语言,有C++、Golang、Python和最近新起的Rust等等。

    稍微对比较有名的项目采用的编程语言做个统计,如下图:

    老一代的公链,比如Bitcoin,Litecoin一般使用C/C++较多(我们看看那个时间,当时Go还没起来呢),新一代的公链比如以太坊,联盟链翘楚超级账本,开始较多使用Go语言,当然我们看到Rust的发展势头也很猛,近两年的很多公链比如波卡,Grin都开始采用Rust语言开发了。

    Go语言的优势

    部署简单

    Go 编译生成的是一个静态可执行文件,除了 glibc 外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。可直接编译成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件上去就完成了。

    性能优秀

    虽然不如 C 和 Java,但通常比原生 Python 应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。

    并发性&通道

    Goroutine 和 channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go 应用也能有效的利用多个 CPU 核,并行执行的性能好。

    良好的语言设计

    Go 非常简单,且易于学习。从学术的角度讲 Go 语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go 的设计是非常优秀的:规范足够简单灵活。正是由于 Go 的简单性,任何的 Python、Elixir、C++、Scala 或者 Java 开发者皆可在一月内组建成一个高效的 Go 团队。

    标准库&工具

    Go目前已经内置了大量的库,特别是网络库非常强大。更重要的是 Go 自带完善的工具链,大大提高了团队协作的一致性。比如 gofmt 自动排版 Go 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 gofix, govet 等非常有用的工具。

    团队牛逼

    Go语言后面的支持者是Google,语言足够在各种场景下得到检验,同时创始人还是C语言之父,对后续的发展和创新可期。

    Go成功的项目

    Go语言在云时代得到了比较广泛的应用,特别是docker和K8s这样的杀手级产品的出现让Go语言在工程界占有一席之地。

    除此之外,Go语言还有非常多的成功运行中的软件:

    nsq:bitly开源的消息队列系统,性能非常高,目前他们每天处理数十亿条的消息;

    packer:用来生成不同平台的镜像文件,例如VM、vbox、AWS等,作者是vagrant的作者;

    skynet:分布式调度框架;

    Doozer:分布式同步工具,类似ZooKeeper;

    Heka:mazila开源的日志处理系统;

    cbfs:couchbase开源的分布式文件系统;

    tsuru:开源的PAAS平台,和SAE实现的功能一模一样;

    groupcache:memcahe作者写的用于Google下载系统的缓存系统;

    god:类似redis的缓存系统,但是支持分布式和扩展性;

    gor:网络流量抓包和重放工具;

    生态卡位和隐性标准

    除了打铁还需自身硬之外,还有些机遇和运势,让区块链选择的了Go语言。我们来看区块链2.0以来最成功的公链和联盟链代表,以太坊和超级账本Fabric,无一例外都选择使用Go作为主导开发语言。

    这两大超级区块链的影响力可不是一般项目可以比拟的,不仅在生态中占据了大的坑位,事实上还隐性的制定了区块链的标准,不论是公链中的智能合约,还是联盟链的技术,都绕不开以太坊和Fabric,那么对于一家想要做区块链技术选型的公司来说,最快捷的实现是什么?自然是直接照搬这两个项目的创新,再捷径一点就是直接拿开源代码改,那么自然Go语言就成为后来者的首选,换种语言重新实现一遍难度也不小,而且如果选择一些创新但不是非常成熟的语言还会缺失一些特定库的支持从而导致项目无法开展。

    很多人对以太坊的影响力毋庸置疑,但实际上Fabric在企业区块链部署上的影响力更不容小觑:

    图表来源《2019年全球企业区块链基准研究报告》

    Hyperledger Fabric是已部署的企业区块链网络中使用最多的协议框架,超级账本Hyperledger(其中Fabric作为旗舰协议)是集成商和软件开发平台最常支持的协议框架,比例达到了53%。

    而在所有的区块链技术书籍里面,有关超级账本的书籍是卖的最为火爆这个事实也是侧面印证了超级账本Hyperledger的影响力。

    比原链在Go语言中的实践

    在选型编程语言的过程中,考量了C,C++, Java,但C/C++大项目维护难度大,而Java又略显笨重,此时Go语言已经在区块链项目上大放异彩,也逐渐形成技术和人才的一个头部效应,那么顺应潮流进行技术选型自然也会减少初始比原链项目遇到的阻力,当然在逐渐开发过程中,我们也感受到了选用Go语言带来的便利和优势。

    Go在区块链上的一个Case

    从技术上来说,区块链节点是需要多模块异步协同工作的,所以Go语言并发性和通道就显得非常有优势,我们看下面交易验证的例子:

    我们使用Routine+Ch+WaitGroup在30行代码之内,就可以构建一个并发的验证交易的功能,在高配置的服务器的情况下,可以跑出10万以上的TPS。

    轻松变成Go语言大师

    我当初进入比原之前也没有做过Go语言开发,但都能够很快上手,基本在半个月内能够参与核心代码的开发和维护了(对于从C/C++/Java有经验的开发者尤其快速),这就是语言简单对团队构建带来的好处。

    统一的协作

    从协作上来说,通过gofmt 自动排版 Go 代码,能够让核心团队成员甚至社区开发者提交的代码风格的差异性降到最小,提升项目的整体质量和可维护性。

    总结

    Go语言本身的特质和优势为其做好了铺垫,而以太坊和超级账本两个超级区块链项目的加持也让Go语言成为了很多区块链项目的首选。

    比原链选用Go语言也充分体会到了其开发区块链底层的优势,但是无需落入语言之争的陷阱,讲求实用主义才是做工程应有之义,比原链核心项目是用Go语言完成,但是周边的很多子项目也有用Java,Python或者JavaScript实现,毕竟生态的多样性才是一个项目长久的根本。转自 http://www.learnfuture.com/Java/7848

    展开全文
  • 区块链培训怎么样?关键还是看其课程质量,下面是我写的一系列课程讲解,大家可以先学习一下!感兴趣的还可以找我要视频哈! 8.1.1ECC数字签名(ECDSA)核心代码 下面通过一个案例验证数字签名,如例所示。 例1-1...

     区块链培训怎么样?关键还是看其课程质量,下面是我写的一系列课程讲解,大家可以先学习一下!感兴趣的还可以找我要视频哈!

    8.1.1 ECC数字签名(ECDSA)核心代码

    下面通过一个案例验证数字签名,如例所示。

    例1-1 ECDSA

    1 package main

    2 import (

    3  "crypto/ecdsa"

    4  "crypto/elliptic"

    5  "crypto/rand"

    6  "crypto/sha256"

    7  "encoding/hex"

    8  "fmt"

    9  "log"

    10  "math/big"

    11 )

    12 func main() {

    13  fmt.Println("生成签名-------------------------------")

    14  privKey, pubKey := NewKeyPair()

    15  msg := sha256.Sum256([]byte("hello world"))

    16  r, s, _ := ecdsa.Sign(rand.Reader, &privKey, msg[:])

    17  strSigR := fmt.Sprintf("%x", r)

    18  strSigS := fmt.Sprintf("%x", s)

    19  fmt.Println("r、s的10进制分别为:", r, s)

    20  fmt.Println("r、s的16进制分别为:", strSigR, strSigS)

    21  signatureDer := MakeSignatureDerString(strSigR, strSigS)

    22  fmt.Println("数字签名DER格式为:", signatureDer)

    23  res := VerifySig(pubKey, msg[:], r, s)

    24  fmt.Println("签名验证结果:", res)

    25  res = VerifySignature(pubKey, msg[:], strSigR, strSigS)

    26  fmt.Println("签名验证结果:", res)

    27 }

    28 func NewKeyPair() (ecdsa.PrivateKey, []byte) {

    29  curve := elliptic.P256()

    30  private, err := ecdsa.GenerateKey(curve, rand.Reader)

    31  if err != nil {

    32  log.Panic(err)

    33  }

    34  pubKey := append(private.X.Bytes(), private.Y.Bytes()...)

    35  return *private, pubKey

    36 }

    37 func MakeSignatureDerString(r, s string) string {

    38  lenSigR := len(r) / 2

    39  lenSigS := len(s) / 2

    40  lenSequence := lenSigR + lenSigS + 4

    41  strLenSigR := DecimalToHex(int64(lenSigR))

    42  strLenSigS := DecimalToHex(int64(lenSigS))

    43  strLenSequence := DecimalToHex(int64(lenSequence))

    44  derString := "30" + strLenSequence

    45  derString = derString + "02" + strLenSigR + r

    46  derString = derString + "02" + strLenSigS + s

    47  derString = derString + "01"

    48  return derString

    49 }

    50 func VerifySig(pubKey, message []byte, r, s *big.Int) bool {

    51  curve := elliptic.P256()

    52  keyLen := len(pubKey)

    53  x := big.Int{}

    54  y := big.Int{}

    55  x.SetBytes(pubKey[:(keyLen / 2)])

    56  y.SetBytes(pubKey[(keyLen / 2):])

    57  rawPubKey := ecdsa.PublicKey{curve, &x, &y}

    58  res := ecdsa.Verify(&rawPubKey, message, r, s)

    59  return res

    60 }

    61 func VerifySignature(pubKey, message []byte, r, s string) bool {

    62  curve := elliptic.P256()

    63  keyLen := len(pubKey)

    64  x := big.Int{}

    65  y := big.Int{}

    66  x.SetBytes(pubKey[:(keyLen / 2)])

    67  y.SetBytes(pubKey[(keyLen / 2):])

    68  rawPubKey := ecdsa.PublicKey{curve, &x, &y}

    69  rint := big.Int{}

    70  sint := big.Int{}

    71  rByte, _ := hex.DecodeString(r)

    72  sByte, _ := hex.DecodeString(s)

    73  rint.SetBytes(rByte)

    74  sint.SetBytes(sByte)

    75  res := ecdsa.Verify(&rawPubKey, message, &rint, &sint)

    76  return res

    77 }

    78 func DecimalToHex(n int64) string {

    79  if n < 0 {

    80  log.Println("Decimal to hexadecimal error: the argument must be greater than zero.")

    81  return ""

    82  }

    83  if n == 0 {

    84  return "0"

    85  }

    86  hex := map[int64]int64{10: 65, 11: 66, 12: 67, 13: 68, 14: 69, 15: 70}

    87  s := ""

    88  for q := n; q > 0; q = q / 16 {

    89  m := q % 16

    90  if m > 9 && m < 16 {

    91  m = hex[m]

    92  s = fmt.Sprintf("%v%v", string(m), s)

    93  continue

    94  }

    95  s = fmt.Sprintf("%v%v", m, s)

    96  }

    97  return s

    98 }

    运行结果如图所示。由于数字签名字段过长,这里只截取了一部分。

    图8.1 运行结果

    展开全文
  • 8.1.1ECC数字签名(ECDSA)核心代码 下面通过一个案例验证数字签名,如例所示。 例1-1ECDSA 1package main 2import ( 3 "crypto/ecdsa" 4 "crypto/elliptic" 5 "crypto/rand" 6 "crypto/sha256" ...9 ...
  • P1 Linux下Go安装 P2 搭建go-ethereum P3 搭建区块链底层技术 P4 区块链技术与应用 P5 搭建Fabric(实践中), P6 实战区块链落地(研究中) 未来的发展趋势,使得价值交换也会变得跟信息传播一样的方便。 ...
  • Go语言区块链开发入门视频教程:了解区块链的基本原理(算力、旷工、挖矿、分叉、智能合约、共识等、掌握区块链系统特点(去中心化,不可伪造、不可篡改、可溯源)。具体包括区块链技术基础,比特币介绍、区块链协议;...
  • Go实现区块链导读

    2019-01-12 22:25:39
    在本教程中,我将尝试通过帮助您以Go语言编写一个简单的区块链来揭开区块链的神秘面纱。 从本教程中,您应该能够: 理解blockchain术语 创建一个属于您自己的简单区块链 了解什么是块以及如何创建块 了解如何维护...
  • Go构建区块链结构

    2018-12-25 10:01:55
    Go构建区块链结构 完成中…
  • 漫谈Go语言与区块链

    千次阅读 2018-12-20 01:09:34
    Go语言优势 高并发:百万级并发能力,令所有其它语言黯然失色; 简洁:语法简洁媲美Python,学习成本低,开发速度快; 高效:执行效率媲美C++;...应用领域:Web、容器、微服务、区块链… 总结:Go...
  • GO语言打造区块链视频教程

    千人学习 2018-09-07 13:34:53
    Go语言号称区块链编程的第一语言,而以太坊的geth就是使用Go语言编写,Go语言与以太坊结合相当紧密,本课程将介绍如果通过Go语言连接以太坊调用智能合约。 学员可以了解到DApp开发的流程,常见的DApp架构设计,及...
  • 区块链的应用:版权保护 区块链用于版权保护的方式: 把文章内容存在第三方数据库,用文章内容生成一个哈希,把哈希写入到区块链。 取数据的时候(需要溯源的时候),去区块链把哈希值取下来,然后用哈希寻址找到...
  • 比特币现在要进行交易就是要有地址 我们现在讲地址生成的过程 你生成一个地址,要进行提供你的public key 1....获取公钥public key ... 2....公钥哈希public key hash (哈希处理方式 :sha256 RIPEMD160 ) ...
  • 文件名:blockchain.go package main //在这个文件里面,是把每一个区块连起来,怎么连? //每一个区块,都包含上一个区块的hash,就是使用这个hash将每个区块进行链接。 import ( "fmt" ) //...
  • IntroductionSo far, we’ve build a blockchain that has all key features: anonymous, secure, and randomly generated addresses; blockchain data storage; Proof-of-Work system; reliable way to store ...
  • IntroductionIn the previous article, we started implementing transactions. You were also introduced to the impersonal nature of transactions: there are no user accounts, your personal data (e.g., ...
  • Go语言区块链开发入门视频教程 ...
  • 新建blockchain.go增加newBlock的方法,根据前一个区块的hash创建区块:本文链接:https://dreamerjonson.com/2018/12/16/gobuildblockchain-3-boltDB/版权声明:本博客所有文章除特别声明外,均采用CC BY 4.0 CN...
  • Go区块链的发展和演进 —— 区块链项目中大量采用Go,去中心化、数字化、不可篡改、可编程、跨平台。
  • IntroductionTransactions are the heart of Bitcoin and the only purpose of blockchain is to store transactions in a secure and reliable way, so no one could modify them after they are created....
  • IntroductionIn the very first part of this series I said that blockchain is a distributed database. Back then, we decided to skip the “distributed” part and focus on the “database” part....
  • IntroductionBlockchain is one of the most revolutionary technologies of the 21st century, which is still maturing and which potential is not fully realized yet. In its essence, blockchain is just a di...
  • go语言实现区块链

    千次阅读 2018-02-10 16:44:41
    区块链中的每一个区块是一个数据节点,每个区块的hash对应后一个区块的previous,区块间通过这个对应关系相连,形成区块链
  • 咳咳,为什么要出这一篇文章呢?首先,这段时间本人在找工作,然后被问到了各类算法的底层细节,有些确实很懵逼。这里做个总结,也顺便给大家归纳归纳一下! 上主题: 椭圆曲线加密: ...我们先来说一说最常用的 ECC...
  • Go语言打造区块链

    2018-04-26 11:48:54
    此文章为译文,原文地址点击打开链接,项目源码1、先直接上代码,有详细注释,然后讲一下如何操作运行这个区块链package main import ( "crypto/sha256" "encoding/hex" "encoding/...
  • GO语言构建区块链

    2019-02-28 13:39:11
    创建第一个区块链项目 读取区块 插入一个区块数据 1.rpc/Server.go package main import ( "encoding/json" "hello/core" "io" "net/http" ) var blockchain *core...

空空如也

1 2 3 4 5 ... 20
收藏数 1,876
精华内容 750
关键字:

go区块链