鱼C论坛

 找回密码
 立即注册
查看: 3707|回复: 32

[已解决]关于Python实现随机生成64位数的16进制代码怎么写?

[复制链接]
发表于 2019-6-13 02:38:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
40151fdd2568dc5c35ea2270c0a18989881cbe2e35e9930a02fc7e3a3e7fd601
以上是 64位数的 16进制 结果

想要用Python来实现自动生成

希望能够生成后自动保存到txt

完全是随机生成,且是每一行。

可以选择生成数量。
这个应该怎么写啊?

最佳答案
2019-6-13 05:35:33
本帖最后由 Seawolf 于 2019-6-13 13:32 编辑

这里的digits = 32 是bytes 的意思,os.urandom(32) #获得32个字节长度的随机字符串,通常用于加解密运算。接下来就是把字符串转为16进制,因为16进制的每个字符需要用4位2进制来表示,也就是4bit,why?  F(Hex) ---- 1111(Binary) 。 这样的话两个16进制字符可以表示为8bits 也就是1个byte。我们有32bytes 所以要64个字符。另外codecs.encode 和 decode()  分别表示编码和解码,因为os.urandom()函数生成的是一个字符串,我们要把他转换成16进制,就要重新编码和解码。
  1. import os, codecs
  2. digits = 32

  3. txtName = "text.txt"
  4. f=open(txtName, "w")
  5. for i in range(1,100):
  6.     hex = codecs.encode(os.urandom(digits), 'hex').decode()
  7.     new_context = hex + '\n'
  8.     f.write(new_context)

  9. f.close()
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-13 03:15:31 | 显示全部楼层
试试这个
  1. import os, codecs

  2. digits = 32
  3. hex = codecs.encode(os.urandom(digits), 'hex').decode()

  4. print(hex)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 03:58:16 | 显示全部楼层

import os, codecs

这里是导入了两个模块,

digits = 32  (创建了一个叫digits名称, 等于32)

hex = codecs.encode(os.urandom(digits), 'hex').decode()
hex是名称,os.urandom(digits) 就是利用os生成一个digist要求的长度结果是吗?(那应该是32位啊?因为digits = 32 啊,有点不懂了。)

codecs.encode 和 decode() 是什么意思啊?

还有就是,目前是只是打印 print,

还有生成的数量选择和保存文目录下 txt 怎么写哈?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 05:35:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Seawolf 于 2019-6-13 13:32 编辑

这里的digits = 32 是bytes 的意思,os.urandom(32) #获得32个字节长度的随机字符串,通常用于加解密运算。接下来就是把字符串转为16进制,因为16进制的每个字符需要用4位2进制来表示,也就是4bit,why?  F(Hex) ---- 1111(Binary) 。 这样的话两个16进制字符可以表示为8bits 也就是1个byte。我们有32bytes 所以要64个字符。另外codecs.encode 和 decode()  分别表示编码和解码,因为os.urandom()函数生成的是一个字符串,我们要把他转换成16进制,就要重新编码和解码。
  1. import os, codecs
  2. digits = 32

  3. txtName = "text.txt"
  4. f=open(txtName, "w")
  5. for i in range(1,100):
  6.     hex = codecs.encode(os.urandom(digits), 'hex').decode()
  7.     new_context = hex + '\n'
  8.     f.write(new_context)

  9. f.close()
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 08:47:32 From FishC Mobile | 显示全部楼层
不能上网
15603868265148132104311362031180.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:34:03 | 显示全部楼层
本帖最后由 Pyluka 于 2019-6-13 12:52 编辑
Seawolf 发表于 2019-6-13 05:35
这里的digits = 32 是bytes 的意思,os.urandom(32) #获得32个字节长度的随机字符串,通常用于加解密运算。 ...


明白了,原来 256bit 就是32bytes 是吧?

如果我想用一个加密算法来进行加密生成,比如 Secp256k1 加密算法,是不是需要获取 Secp256k1模块?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:35:29 | 显示全部楼层

电脑不能上网哈?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:38:15 | 显示全部楼层
Seawolf 发表于 2019-6-13 05:35
这里的digits = 32 是bytes 的意思,os.urandom(32) #获得32个字节长度的随机字符串,通常用于加解密运算。 ...

Traceback (most recent call last):
  File "E:\python\xx.py", line 5, in <module>
    f=file(txtName, "a+")
NameError: name 'file' is not defined

提示这错误额。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:47:08 | 显示全部楼层

import random,sys,os

def captcha (len=64):
    lst = list ('0123456789abcdef')
    result = ''
    for x in range (len):
        result+=lst[random.randint(0,15)]
    return result

if _name_=='_main_':

    if len(sys.argv)<3:exit(0)
    f=open(sys.argv[1],'w')
    for x in range(int(sys.argv[2])):
        f.write(captcha(64)+'\n')
    print('完毕i'sys.argv[1]))

哪里有错的地方吗哈?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 12:51:07 | 显示全部楼层

最后的打印()里有两个类似符号的看不清额。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 12:55:21 | 显示全部楼层
Pyluka 发表于 2019-6-13 12:38
Traceback (most recent call last):
  File "E:\python\xx.py", line 5, in
    f=file(txtName, "a+ ...

改成 f=open(txtName, "w")就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 13:29:17 | 显示全部楼层
Seawolf 发表于 2019-6-13 12:55
改成 f=open(txtName, "w")就好了

b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8

生成结果每一行都给的一样的。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 13:31:53 | 显示全部楼层
Pyluka 发表于 2019-6-13 13:29
b08180bfefeb8e613df4e91a478efb3b9e691b8d2f991d7da473d3a760aa41a8
b08180bfefeb8e613df4e91a478efb3b ...

把hex = codecs.encode(os.urandom(digits), 'hex').decode() 放进循环里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 13:37:15 | 显示全部楼层
Seawolf 发表于 2019-6-13 13:31
把hex = codecs.encode(os.urandom(digits), 'hex').decode() 放进循环里面

可以哈,还有就是我说的那个加密方式,能实现吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 13:45:30 | 显示全部楼层
Pyluka 发表于 2019-6-13 13:37
可以哈,还有就是我说的那个加密方式,能实现吗?

可以的,pip install secp256k1 以后直接导入模块就可以了
这儿有一些例子,你可以参考
  1. from secp256k1 import PrivateKey, PublicKey

  2. privkey = PrivateKey()
  3. privkey_der = privkey.serialize()
  4. assert privkey.deserialize(privkey_der) == privkey.private_key

  5. sig = privkey.ecdsa_sign(b'hello')
  6. verified = privkey.pubkey.ecdsa_verify(b'hello', sig)
  7. assert verified

  8. sig_der = privkey.ecdsa_serialize(sig)
  9. sig2 = privkey.ecdsa_deserialize(sig_der)
  10. vrf2 = privkey.pubkey.ecdsa_verify(b'hello', sig2)
  11. assert vrf2

  12. pubkey = privkey.pubkey
  13. pub = pubkey.serialize()

  14. pubkey2 = PublicKey(pub, raw=True)
  15. assert pubkey2.serialize() == pub
  16. assert pubkey2.ecdsa_verify(b'hello', sig)
复制代码

  1. from secp256k1 import PrivateKey

  2. key = '31a84594060e103f5a63eb742bd46cf5f5900d8406e2726dedfc61c7cf43ebad'
  3. msg = '9e5755ec2f328cc8635a55415d0e9a09c2b6f2c9b0343c945fbbfe08247a4cbe'
  4. sig = '30440220132382ca59240c2e14ee7ff61d90fc63276325f4cbe8169fc53ade4a407c2fc802204d86fbe3bde6975dd5a91fdc95ad6544dcdf0dab206f02224ce7e2b151bd82ab'

  5. privkey = PrivateKey(bytes(bytearray.fromhex(key)), raw=True)
  6. sig_check = privkey.ecdsa_sign(bytes(bytearray.fromhex(msg)), raw=True)
  7. sig_ser = privkey.ecdsa_serialize(sig_check)

  8. assert sig_ser == bytes(bytearray.fromhex(sig))
复制代码

  1. from secp256k1 import PrivateKey

  2. key = '7ccca75d019dbae79ac4266501578684ee64eeb3c9212105f7a3bdc0ddb0f27e'
  3. pub_compressed = '03e9a06e539d6bf5cf1ca5c41b59121fa3df07a338322405a312c67b6349a707e9'
  4. pub_uncompressed = '04e9a06e539d6bf5cf1ca5c41b59121fa3df07a338322405a312c67b6349a707e94c181c5fe89306493dd5677143a329065606740ee58b873e01642228a09ecf9d'

  5. privkey = PrivateKey(bytes(bytearray.fromhex(key)))
  6. pubkey_ser = privkey.pubkey.serialize()
  7. pubkey_ser_uncompressed = privkey.pubkey.serialize(compressed=False)

  8. assert pubkey_ser == bytes(bytearray.fromhex(pub_compressed))
  9. assert pubkey_ser_uncompressed == bytes(bytearray.fromhex(pub_uncompressed))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 13:58:35 From FishC Mobile | 显示全部楼层
Pyluka 发表于 2019-6-13 12:51
最后的打印()里有两个类似符号的看不清额。。

最后一句就是print提示信息,完全可以去掉或改成你喜欢的
我现在是手机上网
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 14:03:11 | 显示全部楼层
wp231957 发表于 2019-6-13 13:58
最后一句就是print提示信息,完全可以去掉或改成你喜欢的
我现在是手机上网

import random,sys,os

def captcha (len=64):
    lst = list ("0123456789abcdef")
    result = ''
    for x in range (len):
        result+=lst[random.randint(0,15)]
    return result

if __name__=='__main__':

    if len(sys.argv)<3:exit(0)
    f=open(sys.argv[1],"w")
    for x in range(int(sys.argv[2])):
        f.write(captcha(64)+'\n')



这样以后,可以运行,但是找不到生成后的文件在哪
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 14:04:15 From FishC Mobile | 显示全部楼层
Pyluka 发表于 2019-6-13 14:03
import random,sys,os

def captcha (len=64):

你咋运行的,理论上和你的.py应该在一起
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-13 14:33:59 | 显示全部楼层
wp231957 发表于 2019-6-13 14:04
你咋运行的,理论上和你的.py应该在一起

我直接F5运行的,理论上来讲应该是在同一文件夹下生成吧?可是没有呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-13 14:36:07 From FishC Mobile | 显示全部楼层
Pyluka 发表于 2019-6-13 14:33
我直接F5运行的,理论上来讲应该是在同一文件夹下生成吧?可是没有呢

你是用idle吧,那应该在你的python的运行目录下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-11 23:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表