个人技术学习记录(1)

个人技术成长博客(1)

前情提要:个人技术成长博客主要是为了记录自己每日学习的内容,方便自己以后复习,比较简陋且内容较杂,同时难免有错误,恳请观者不吝赐教,感谢!

#今日学习内容

1.python中字符串前加b是什么意思?

2.SHA-256算法,hashlib包实现简单挖矿算法

3.椭圆曲线数字签名算法 ecdsa的原理


一. 学习内容

1.python中b加字符串是什么意思? // Python 字符串前面加b,u,r的含义
解答:python 3.x版本中默认的字符串是(py2.x里的)unicode, bytes是(py2.x)的str, b 前缀代表的就是bytes。
参考博客:[https://blog.csdn.net/cheng__lu/article/details/107725961]


2.什么是SHA-256算法,怎么通过python的hashlib包模拟实现SHA-256的挖矿算法
参考博客:
1.https://blog.csdn.net/weixin_43790276/article/details/98397456
2.SHA256算法原理及其实现
3.https://zhuanlan.zhihu.com/p/94619052
举例实验如下
实验题目:
比特币的“挖矿”过程实质是Hash值的逆向计算过程,即需要计算某个字符串m使得其Hash值以若干个0开头。
具体以多少个0加粗样式开头不确定,规定0的数量越多,计算出的难度就越大。请使用SHA-256算法,编写一个挖矿函数,用于计算字符串,其Hash值具有特定长度的0前缀。
函数定义:Miner(n) => m
n:0前缀长度
m:字符串,其Hash值以n个0开头
注:m不唯一,只需找到一个符合条件的即可。Python可以使用hashlib。
注意:Hash算法是不可逆的,只能从前往后暴力求解(目前博主本人所学的理解),所以在本机上测代码测试中,0的个数应该取值较小。
python实现代码如下:

import hashlib
import random

def miner(n):
    random_str = ''
    str1 = ''
    count = 0
    flag = 1
    num = 0
    base_str = 'ABCDEFGHIGKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz,.0123456789'  
    length = len(base_str) - 1
    while True:
        for i in range(0,32):#32是自设的,阅读者可进行分析修改
            random_str += base_str[random.randint(0,length)]
        random_str = str(random_str)
        #random_str.encode('utf-8')
        h = hashlib.sha256(random_str.encode('utf-8'))
        str1 = h.hexdigest()
        for i in range(0,n):#计算从首位开始连续0的个数
            if str1[i] == '0':
                count = count + 1
            else:
                flag = 2
                break
        if count == n and flag == 1:
            return random_str
        if count > n:
            count = 0
            random_str = ''
            str1 = ''
            flag = 1
            #查看迭代次数
            num = num + 1
            print(num)

n = int(input('请输入开头有多少个0:'))
str2 = miner(n)
h = hashlib.sha256(str2.encode('utf-8'))
print(h.hexdigest())

总结:在实验时运行多次出现编码错误,这和问题1的问题一样,在python3.x中,默认的是字符串为Unicode类型,而hash传递时需要的是utf-8类型,故应该先进行编码转换为正确的utf-8类型,才能实验成功。
参考博客:https://www.cnblogs.com/zqifa/p/python-hashlib-1.html


3.什么是椭圆曲线数字签名算法 ecdsa?
参考博客:ECDSA(椭圆曲线数字签名算法)


二. 学习总结

总结:这是第一篇学习记录,写的非常不成熟,今日为了完成密码学的实验作业,很浅显粗略的了解了一下相关知识,鄙人技术非常不成熟,未来还需要加强练习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值