golang+区块链学习日志12月8日

——golang学习日志12.8

一、变量

  1. 变量 = 变量名+值+数据类型
  2. 变量声明语法:var+变量名+数据类型

二、变量使用方法

1. 指定变量类型

var i int
fmt.Println("i=", i)

输出结果为i = 0,因为没有给i赋值,int类型的系统默认值为0,string为空串,float默认也为0.

2. 类型推导

var i = 6.66
fmt.Println("i=",i)

输出结果为i = 6.66,系统会根据值自行判定变量类型

3. 省略var

name := "tom"
Println("name=",name)

输出为name = tom,要注意的是 := 的 : 千万不能省略,name := “tom” 等价于 var name string name = “tom” 且 :=左侧的变量不应该是已经声明过的,否则会出错

三、多变量声明

用法如下:

	//方式1
	var n1, n2, n3 int
	fmt.Println("n1=", n1, "n2=", n2, "n3=", n3)
	//方式2
	var a1, name1, a2 = 1, "shuaige", 3
	fmt.Println("a1=", a1, "name1=", name1, "a2=", a2)
	//方式3
	b1, name2, b2 := 3, "tom", 5
	fmt.Println("b1=", b1, "name2=", name2, "b2=", b2)

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

变量使用注意事项

同一类型的变量可在该类型数值范围内不断变化

//变量使用注意事项
var i int = 10
i = 30
i = 50
fmt.Println("i=",i)		//此处i的输出为50,多个同类型值以最后一个为准
	//	i = 1.2
	//	fmt.Println("i=",i)这儿就会报错,因为i为int型

程序中+号的使用

  1. 若+号两边都是数值型时,则作加法运算
  2. 若+号两边都是字符串,则作字符串凭借
func main(){
	var n1 = 234
	var n2 = 462
	var sum = n1 + n2
	fmt.Println("sum=",sum)
	var str1 = "lyong"
	var str2 = "henshuai"
	var str = str1 + str2
	fmt.Println("str=",str)
}

——区块链密码学基础

比特币用到了密码学的两个功能,一个是哈希函数,另一个是签名

一、哈希函数

比特币采用的哈希函数是SHA-256(secure hash algorithm),本文主要记述哈希函数应用于比特币的三大特点

1. collision resistance

哈希碰撞是指当输入不同,却产生了相同哈希值的冲突,但这种碰撞很难人为制造,所以说哈希函数一般都是collision resistance(抗碰撞性),但没法证明哈希函数是严格collision free,即不会发生碰撞的。此特点可应用于验证文件是否被篡改,比如在上传一个文件前,先算出此文件的哈希值,保存在本地,当从云端下载文件时,再计算一次哈希值,将两次的哈希值比较即可知晓文件是否被篡改。

2. hiding

hiding指单向不可逆性,即给定一个x,可很容易推出h(x),但给定一个h(x)却很难推出x,除非蛮力破解,在实际应用中应尽量使输入空间足够大,分布尽可能均匀。

3. puzzle friendly

由于哈希值的计算是不可预测的,如果想要h(x)落在某范围内,没有其他的好方式,只能一个一个去试,去找这个随机数,而找这个随机数可用作工作量证明——Pow,即存在某个随机数nonce,使得H(block header)<= target。

二、签名

普通的加密算法为symmetric encryption algorithm(对称加密),即采用同一把密钥进行加密和解密,缺点是密钥分发不是很方便。
比特币采用的加密算法是asymmetric encryption algorithm(非对称加密),即采用一对密钥,公钥+私钥,公钥用于加密,私钥用于解密。
在比特币区块链中私钥代表了对比特币的控制权。交易发起方用私钥对交易(包括转账金额和转账地址)签名并将签名后的交易和公钥广播,各节点接收到交易后均可以用公钥验证交易是否合法。在此过程中交易发起方不需要暴露自己的私钥,从而实现了保密目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值