纯离线独立操作坏境,天知地知你知其他人都不知。 首先要有Python3的环境,并且pip安装好bitcoin模块,如果你一下子理解不了下面的代码,可以参考上一篇文章《Python:三行代码自制比特币私钥》,理解核心代码。 准备工作好后,直接复制粘贴下面这段代码到Python代码框,保存后按F5键运行。结果会以txt文本文件的形式,输出到你Python文件的默认路径下,供离线打印。 #区块链资产进阶安全课#比特币私钥生成和保管的银行级方法#微信公众号:汤强#导入工具包importrandomimportstringimportbitcoin#这里设置一口气需要出几个私钥iter_num=3#随机数生成函数————#生成一个由0和1组成的n位的字符串,n在这里设置为256,如01010100111……(共256位)defrandom_01(n):result=[]foriinrange(n):i=random.randint(0,1)result.append(i)result_txt=[str(i)foriinresult]return"".join(result_txt)#随机数处理函数————让随机之外还有随机#你可以在这步手动更改defdep_k_2(k_2):k_2=k_2[:254]+str(random.randint(0,1))+str(random.randint(0,1))returnk_2#私钥集生成函数#转换路径:#1、加工后的256位二进制随机数k_2#->2、等于k_2的十进制数k_10#->3、私钥k->4、公钥K->5、地址A->6、加密私钥kk(用于显示)defprod_key(iter_num):foriinrange(iter_num):#生成一个1-50之间的整数,用于后续加密random_int=random.randint(1,50)#生成256位的0和1组成的二进制字符串k_2=random_01(256)#进一步处理下上行代码生成的字符串,让随机更随机k_2=dep_k_2(k_2)#生成用于可公开打印的私钥随机字母r#r的取值范围是26个大小写英文字母和10个阿拉伯数字r=random.sample(string.ascii_letters+string.digits,1)iflen(str(k_2))==256:#检查字符是否是256位k_10=int("0b"+str(k_2),2)#二进制数k_2转为十进制k_10k=bitcoin.encode_privkey(k_10,"wif_compressed")#生成私钥kK=bitcoin.privkey_to_pubkey(k)#生成公钥KA=bitcoin.pubkey_to_address(K)#生成地址A#生成打印私钥kkkk=k[0:random_int]+r[0]+k[random_int+1:52]+k[random_int]#生成可打印文本txttxt="序号:{} 展示私钥:{} 地址:{} ".format(random_int,kk,A)else:print("Not256bits")#若不是256位,则打印报错信息#生成打印文件,第二参数"a"代表追加txt_file=open("key.txt","a")#打印到文件key.txt中print(txt,file=txt_file)#关闭文件txt_file.close()#整个文件需要执行的函数if__name__=="__main__":prod_key(iter_num)具体的要点都在代码里作了注释,有Python经验的读者可以DIY专属你的代码。比如随机数处理函数(dep_k_2),可以略作改动,变化出属于你设定的随机,比如: defdep_k_2(k_2):k_2=k_2[:253]+str(random.randint(0,1))+str(random.randint(0,1))+str(random.randint(0,1))returnk_2这段代码的意思是:把原来自动生成的随机数最后三位截除后(只选前253位,这也是k_2[:253]的来历),然后添加三位随机数,让随机数更随机。当然这里并不是绝对的真随机,但用在离线加密私钥生成场景,是绝对足够了。 (责任编辑:admin) |