Go语言中文网 为您找到相关结果 82

golang实现摘要签名和验证

golang实现摘要签名和验证的过程: 两个步骤: 利用私钥对一个摘要进行签名。 $ ./test -command sign -key ./privatekey.pem -text "12345" MEUCIE7DsGmTHJ3VGZec2UF9hRX7jq9Yd7F2kS7kEL132js8AiEA/ZlyIpo86Rn3waR8m2c4BtQPu8cNjYAnroibK+ujslY= 利用公钥验证签名是否有效。 $ ./test -command verify -cert ./publickey.pem -text "12345" -sign "MEQCIFuvcVHlztAN7YVehgCDYzVSo1Q10iTKeJE5ydxzfih5AiAC2ETt/8XuE1VHaGkLsiJ...阅读全文

博文 2020-01-16 07:32:39 CodingCode

Go语言开发(十五)、Go语言常用标准库五

Go语言开发(十五)、Go语言常用标准库五 一、md5 1、md5简介 md5在crypto/md5包中,md5包提供了New和Sum方法。 func New() hash.Hash func Sum(data []byte) [Size]byte hash.Hash继承了io.Writer,因此可以将其当成一个输入流进行内容的更新。 type Writer interface { Write(p []byte) (n int, err error) } Write方法将p中的内容读入后存入到hash.Hash,最后在Sum方法通过内部函数checkSum计算出其校验和。Sum函数是对hash.Hash对象内部存储的内容进行校验和计算然后将其追加到data的后面形成一个新的byte切片。通常...阅读全文

博文 2019-01-20 00:35:14 天山老妖S

Go Web 编程--如何确保Cookie数据的安全传输

什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如跟踪分析用户行为等) Go语言如何表示Cookie 在Go的net/http库中使用http.Cookie结构体表示一个Cookie数据,调用http.SetCookie函数则会告诉终端用户的浏览器把...阅读全文

博文 2020-03-08 21:34:25 kevinyan

兄弟连区块链教程Fabric1.0源代码分析ECDSA椭圆曲线数字签名算法

##兄弟连区块链教程Fabric1.0源代码分析ECDSA椭圆曲线数字签名算法,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # Fabric 1.0源代码笔记 之 ECDSA(椭圆曲线数字签名算法) ## 1、椭圆曲线算法概述 ### 1.1、无穷远点、无穷远直线、射影平面 * 平行线相交于无穷远点; * 直线上有且只有一个无穷远点; * 一组相互平行的直线有公共的无穷远点; * 平面上任何相交的两直线,有不同的无穷远点; * 全部无穷远点沟通一条无穷远直线; * 平面上全部无穷远点和全部普通点构成射影平面。 ### 1.2、射影平面点定义 对于普通平面上...阅读全文

博文 2018-11-09 15:11:26 ITXDL

区块链技术

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 第一章:区块链基本知识 1.区块链概念 顾名思义,“区块链”是一个链表,这个链表由所有人共同维护和认可。 1.1.什么是区块链 区块链(Block chain)是一种分布式共享数据库(数据分布式储存和记录),利用去中心化和去信任方式集体维护一本数据薄的可靠性的技术方案。 如果把区块链作为一个状态机,则每次交易就是试图改变一次状态,而每次共识生成的区块,就是参与者对于区块中所有交易内容导致状态改变的结果进行确认。 1.2.区块链的特点 区块结构有两个非常重要的特点: l每个区块的块头包含了前一区块的交易信息的压缩值,因此从创始块到当前区块形成了链条。 l每个区块主体上的交易记录是前一区块创建后、该区块创建前发生的所...阅读全文

博文 2019-09-12 18:02:37 链客

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现

兄弟连区块链技术培训Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指定代码方式,peer chaincode install -n <链码名称> -v <链码版本> -p <链码路径>* 基于链码打包文件方式,peer chainc...阅读全文

博文 2018-07-23 15:34:59 Delete_88c3

golang[33]-blockchain-hash

哈希函数有三个特点:输入无限的字符会输出给我们固定长度的字符(即便是图书馆里面所有的数据)输入的函数的微小变化最后都会带来哈希函数返回值的巨大变化。哈希函数的特点是不能根据哈希函数的返回值倒推出我们输入的数据是什么。同样的,我们在计算哈希函数之前,也不能够判断出数据回输出什么样的哈希值。用途数字指纹数字签名数字防篡改go实现hash123456789101112131415161718192021222324252627func main(){ //第一种方式 sum:= sha256.Sum256([]byte("jonson love olaya")) fmt.Printf("%X",sum) //第2种方式 h:=sha256.New() h.Write([]byte("jonson ...阅读全文

博文 2018-12-13 00:35:45 jonson_jackson

leetcode_141

Golang: 思路:这道题是我在刷题的早期遇见的题,当时的思路是用map记录跑过的点,如果有环,那么指针终归会经过map里的点。但是,这个思路不是最好的思路,很明显,快慢指针才是解决这个问题的王道。什么是快慢指针,就是双指针,一个指针每次走两步,另一个每次走一步,那么如果有环,快指针势必会追上慢指针。 小记:最近因为有其他事情,所以会耽误自己刷题,希望自己还是能尽量抽出闲暇时间来写写leetcode和算法。 代码如下: func hasCycle(head *ListNode) bool { if head==nil||head.Next==nil{ return false } pointer1,pointer2:=head,head for { if pointer2.Next!=ni...阅读全文

博文 2020-02-10 05:32:38 淳属虚构

golang[36]-区块链-数据签名生成

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475package mainimport ( "crypto/ecdsa" "crypto/rand" "crypto/sha256" "crypto/elliptic" "log" "fmt")//生成私钥和公钥,生成的私钥为结构体ecdsa.PrivateKey的指针//type PrivateKey struct {// PublicKey// D *big.Int//}func newKeyPair2() (e...阅读全文

博文 2018-12-13 00:35:45 jonson_jackson

golang[37]-blockchain-验证数据签名

验证数据签名1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192package mainimport ( "crypto/ecdsa" "crypto/rand" "crypto/sha256" "crypto/elliptic" "log" "fmt" "math/big")//生成私钥和公钥,生成的私钥为结构体ecdsa.PrivateKey的指针//type PrivateKey struct...阅读全文

博文 2018-12-13 00:35:45 jonson_jackson

让我们一起啃算法----合并两个有序数组

合并两个有序数组(Merge-Sorted-Array) 题干: 给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例: 输入: nums1 = [1,2,3,0,0,0], m = 3 nums2 = [2,5,6], n = 3 输出: [1,2,2,3,5,6]来源:力扣(LeetCode) 这是一题关于数组的题目。目前为止讲解数组、字符串相关的题目都会引入一个解题思路: 双指针思路。其实就是想让小伙伴们培养一个习惯:面对数组、字符串类...阅读全文

博文 2020-05-11 10:32:47 三斤和他的朋友们

区块链密码学

链客,专为开发者而生,有问必答!此文章来自[区块链技术社区](https://www.liankexing.com),未经允许拒绝转载。 区块链密码学11一 、概念主要介绍非对称加密的一些概念。公钥、私钥:均可加密或解密。私钥用来解密和签名,给自己用的。公钥由本人公开,用于加密和验证签名,给他人用的。验签:用公钥解密签名得到摘要,然后用原始文件经过hash得到摘要,与解密出的摘要进行对比。 签名:内容->hash->digest->私钥加密->签名 证书:数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章,即CA的私钥加密生成)后形成的一个数字文件。二、举例说明假设X给Y写一份信,那么这封将...阅读全文

博文 2019-06-21 16:02:43 链客区块链技术问答社区

Ethereum学习笔记3--以太坊用到的加密技术

一 加密技术总结 "crypto/ecdsa":用与数字签名 "golang.org/x/crypto/sha3" "crypto/rand" "github.com/ethereum/go-ethereum/crypto/bn256/google" "github.com/ethereum/go-ethereum/crypto/bn256/cloudflare" "crypto/elliptic" "github.com/ethereum/go-ethereum/crypto/secp256k1" "crypto/pbkdf2" "crypto/aes" "crypto/cipher" "crypto/hmac "crypto/subtle" "crypto/cipher" "crypto...阅读全文

博文 2019-08-02 21:32:38 陈兴强

Hyperledger Fabric 1.3 特性调研之Identity Mixer(一)

Idemix(Identity Mixer)是一套协议加密组件,提供更强大的身份验证和隐私保护特性。 适用场景 用户发送交易时,需要隐藏自己的身份信息,并且不希望其他人通过追踪交易记录查找到自己发送的交易。即用户的保密要求比较严格,具体为用户在需要以下保密要求时,建议使用该功能: 匿名性(anonymity):不暴露交易者的身份; 无关联性(unlinkability):无法通过多个交易确定发送者身份,即一个身份发送多条交易不会暴露这些交易来自相同的身份。 原理 发行方(issuer)颁发给用户证书,认证用户的一些属性。 用户生成ZKP(zero-knowledge proof),证明自己拥有该证书,并选择性地暴露自己的部分属性;将此ZKP发送给验证方(verifier)即可。 具体在Fab...阅读全文

博文 2019-07-03 17:35:19 RaeSnow

golang中crypto/dsa包

DSA是用于数字签名的一种算法,私钥进行签名,公钥进行验证。关于更多dsa内容以及dsa实现移步www.baidu.com。 那么go语言中怎么进行数字签名呢?go语言中怎么进行数字验证呢?下面给出这两个操作的案例代码: package main import ( "crypto/dsa" "crypto/rand" "fmt" ) func main() { // parameters 是私钥的参数 var param dsa.Parameters // L1024N160是一个枚举,根据L1024N160来决定私钥的长度(L N) dsa.GenerateParameters(¶m, rand.Reader, dsa.L1024N160) // 定义私钥的变量 var priva...阅读全文

博文 2018-12-09 11:34:43 laijh

BitKan

梅克尔树(Merkle trees)是区块链的基本组成部分。虽说从理论上来讲,没有梅克尔树的区块链当然也是可能的,你只需创建直接包含每一笔交易的巨大区块头(block header)就可以实现,但这样做无疑会带来可扩展性方面的挑战,从长远发展来看,可能最后将只有那些最强大的计算机,才可以运行这些无需受信的区块链。 正是因为有了梅克尔树,以太坊节点才可以建立运行在所有的计算机、笔记本、智能手机,甚至是那些由Slock.it生产的物联网设备之上。那么,究竟梅克尔树是如何工作的呢,它们又能够提供些什么价值呢,现在以及未来的? 首先,咱们先来讲点基础知识。梅克尔树,一般意义上来讲,它是哈希大量聚集数据“块”(chunk)的一种方式,它依赖于将这些数据“块”分裂成较小单位(bucket)的数据块,每一...阅读全文

博文 2017-12-06 03:34:43 谈谈以太坊的Merkle树

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指...阅读全文

博文 2018-11-06 19:34:39 兄弟连区块链培训

Golang面试之HTTPS

引用 HTTPS协议详解(一):HTTPS基础知识 TLS/SSL工作原理 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 深入HTTPS系列四(中间人攻击) HTTPS中间人攻击及防御 建议阅读 SSL/TLS 握手过程详解 细说 CA 和证书 扯一扯HTTPS单向认证、双向认证、抓包原理、反抓包策略 HTTPS协议 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 TLS/SSL全称安全传输层协议Transport Layer Security, 是介于T...阅读全文

博文 2020-05-11 19:32:50 网管同学

初识Clef

初识Clef 以太坊版本1.8.4开始,增加了独立签名人Clef功能,该功能目前尚处在alpha阶段。它主要实现了签署交易、签署数据和管理账户。它的README中是这样描述的: Clef可以用来签署交易和数据,并且可以代替geth的账户管理。这使DApps不依赖于geth的账户管理。 当DApp想要签署数据时,它可以将数据发送给签名者,然后签名者将向用户提供上下文并要求用户签署数据。 如果用户授予签名请求,签名者将签名发送回DApp。 此设置允许DApp连接到远程以太坊节点并发送本地签名的事务。 这可以在DApp连接到远程节点的情况下提供帮助,因为本地以太坊节点不可用,不与同步链或没有内置(或有限)帐户管理的特定以太坊节点同步。 Clef可以在同一台机器上作为守护进程运行,也可以在usb-s...阅读全文

博文 2018-06-03 17:34:38 alphaqiu

Hyperledger-Fabric源码分析(加入通道)

前一篇讲完通道创建,接下来马上趁热打铁来看下加入通道这部分的实现,先看下命令。 peer channel join -b mychannel.block 可以看到,这里用上了上一步所生成的通道的genesisblock。 peer executeJoin func executeJoin(cf *ChannelCmdFactory) (err error) { spec, err := getJoinCCSpec() if err != nil { return err } // Build the ChaincodeInvocationSpec message invocation := &pb.ChaincodeInvocationSpec{ChaincodeSpec: spec} cr...阅读全文

博文 2019-04-09 09:34:40 Pillar_Zhong

golang中crypto/ecdsa包

ECDSA和DSA一样也是用于数字签名,同样在go使用上也很类似,RSA、DSA和ECDSA三者的签名的区别,可以移步:https://blog.csdn.net/sszgg2006/article/details/25478269 1、生成公钥、私钥代码 /* 生成公钥和私钥的时候,可以选择以下几种 elliptic.P224() elliptic.P256() elliptic.P384() elliptic.P521() */ // 生成公钥和私钥 privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) if err != nil { log.Fatalln(err) } // 公钥是存在在私钥中的,从私钥中...阅读全文

博文 2018-12-09 13:34:42 laijh

fabric中的plugin机制

fabric中的plugin机制 之前是研究1.0的实现,发现endorse的过程中去escc签名的流程变化很大。下面以escc为例,看下新版的fabric是怎么实现的。 首先怎么自定义一个escc的plugin handlers: ... endorsers: escc: name: DefaultEndorsement custom: name: customEndorsement library: /etc/hyperledger/fabric/plugins/customEndorsement.so ... core.yaml,可以看到/etc/hyperledger/fabric/plugins/customEndorsement.so,这里是使用了golang的一个plugin的...阅读全文

博文 2019-03-04 15:35:50 Pillar_Zhong

go网络编程学习笔记6(安全)

简介 尽管互联网最初被设计为可以承受敌对代理攻击的系统,但它过去一直是在一个可信的实体和合作的环境中发展起来的。可惜现在已经时过境迁。垃圾邮件,拒绝服务攻击,网络钓鱼这些东西使得每一个上网者都需要自行承担风险。 应用程序应当在复杂的互联网环境中仍然可以正确工作。“正确”不光意味着程序功能的正确,同时还意味着要确保数据传输过程中的保密性和完整性,甚至只允许合法用户进行访问和其它问题。 这自然使得编程更加复杂。在构建安全应用程序的过程中,会出现很复杂和微妙的问题。如果你想自己这样做(如实现一个自有安全库),通常都会以失败而告终。相反,你需要使用安全专家设计的安全库。 ISO 安全架构 功能层次 主要的安全系统功能 认证 - 身份校验文件 数据完整性 - 数据不被篡改 保密 - 数据不能暴露给他人...阅读全文

博文 2019-06-14 16:02:51 GeminiGirl0604

加密货币的本质

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 去年,比特币暴涨,其他币也像雨后春笋一样冒出来,已经有1000多种了。 很多人都在问,加密货币(cryptocurrency)的时代,真的来临了吗?将来会不会人类不再使用美元、人民币,改用加密货币?那么多品种,我应该使用哪一种币?要不要现在就去投资一些? 这些问题的答案,我也想知道,就花了很多时间查阅资料、研究协议。前两周发表的《区块链入门教程》和《比特币入门教程》,是我的学习心得。但是,那两篇教程主要介绍基本概念、探讨协议的可行性,没回答一个根本的问题:加密货币到底是什么? 下面就是我对这个问题的思考。阅读之前,如果你已经了解区块链和比特币,那很好;如果不了解,也没关系,本文不涉及技术,只讨论最基本的原理。 一...阅读全文

密码学家的工具箱(golang代码实现)

本文参考《图解密码技术》第三版    密码学家的工具箱,指六种常用加密方式包括 对称密码、非对称密码、单向散列函数、消息认证码、数字签名、伪随机数生成器。堪称六大杀器,现代社会的信息安全皆基于此。本文用go语言代码实现六种工具的具体应用。 对称密码 是指加密解密时用同一个秘钥,下面代码采用AES进行加解密,私钥长度只支持128,192,256位的字节数组。 AES加解密的代码应用: package main import ( "bytes" "crypto/aes" "crypto/cipher" "fmt" ) func PKCS5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ci...阅读全文

以太坊挖矿源码:clique算法

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 clique以太坊的官方共识算法是ethash算法,这在前文已经有了详细的分析: 它是基于POW的共识机制的,矿工需要通过计算nonce值,会消耗大量算力来匹配target值。 如果在联盟链或者私链的方案里,继续使用ethash就会浪费算力,POW也没有存在的意义。所以以太坊有了另一种共识方案:基于POA的clique。 POA, Proof of Authority。权力证明,不同于POW的工作量证明,POA是能够直接确定几个节点具备出块的权力,这几个节点出的块会被全网其他节点验证为有效块。 建立私链 通过这篇文章的操作可以建立一个私有链,观察这个流程可以看到,通过puppeth工具建立创世块时,会提示你选择哪...阅读全文

博文 2019-09-27 17:02:47 链客

Go Web 编程--如何确保Cookie数据的安全传输

什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如跟踪分析用户行为等) Go语言如何表示Cookie 在Go的net/http库中使用http.Cookie结构体表示一个Cookie数据,调用http.SetCookie函数则会告诉终端用户的浏览器把...阅读全文

博文 2020-03-08 16:33:04 Kevin