哪种随机化方法更好?

Which randomization method is better?

pybitcointools (https://github.com/primal100/pybitcointools) generates a bitcoin private key using the following function (in main.py: https://github.com/primal100/pybitcointools/blob/master/cryptos/main.py):

import hashlib
def random_key():
    entropy = random_string(32) \
        + str(random.randrange(2**256)) \
        + str(int(time.time() * 1000000))
    return sha256(entropy)

在其他地方我看到了一个更简单的实现:

import os
os.urandom(32).hex()

不知哪个更随机,哪个更安全?

os.urandom() 使用专门为加密安全随机数设计的系统功能,并且远远优于您显示的其他功能。第一个函数看起来很像某人的 "roll your own" 版本的随机字符串,虽然他没有完全搞砸它,但它对于加密使用来说还不够好。

永远不要推出自己的加密货币!