生成强伪随机数用作凭证代码

理查德·诺普(Richard Knop)

我需要生成一个长度为N的强伪随机数(仅包含字符0-9的字符串)。

为了在支付系统中用作凭证代码,需要很难预测生成的字符串。

请检查我的代码。这是我想出的:

import os
import binascii.hexlify
import random

def get_string_random_digit(n):
    r = os.urandom(n*2)
    ri = int(binascii.hexlify(r), 16)
    arr = list(str(ri))
    while len(arr) > n:
        random.shuffle(arr)
        arr.pop()
    return str(''.join(arr))

os.urandom应该可以安全地用于密码学中,因此我认为可以安全地用于凭证支付系统中。

如果相关的话,该系统将在Ubuntu 12.04 LTS上运行(urandom显然取决于OS的实现)。

我首先使用os.urandom生成长度为N * 2的字符串。然后,我们构建了Python随机模块,以将字符串减少到其长度的一半。

有什么建议?

这样够安全吗?

阿尔夫

os.urandom()返回字节,因此您应该将它们重新解释为alongint; 您选择先将其转换为十六进制,然后再将其转换为int这可以正常工作,并且可以用于任意长数。您可能曾经struct一步就可以做到这一点,但是这对于很大的数字来说是行不通的,因此我认为这一步就很好了(除非您想每秒进行数百万次此操作)。

不过,您应该删除该random.shuffle部分。它不会为您的值增加任何“随机性”。str(ri)[-n:]如果您需要一长串,请使用n

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

伪随机数生成

来自分类Dev

Matlab:如何生成伪随机数

来自分类Dev

Matlab:如何生成伪随机数

来自分类Dev

Haskell中的伪随机数生成器

来自分类Dev

从均匀分布生成伪随机数

来自分类Dev

Memento在伪随机数生成器中的用法

来自分类Dev

RNGCryptoServiceProvider使用哪种伪随机数生成算法?

来自分类Dev

MEX C中的伪随机数生成

来自分类Dev

使用libsodium在C中伪随机数生成

来自分类Dev

超简单伪随机数生成算法

来自分类Dev

RNGCryptoServiceProvider使用哪种伪随机数生成算法?

来自分类Dev

Excel VBA生成100个伪随机数的列表

来自分类Dev

生成独立的伪随机数序列-fortran 90

来自分类Dev

PHP 伪随机数生成器

来自分类Dev

使用随机数如何生成不带小数的伪随机数?

来自分类Dev

随机生成随机数

来自分类Dev

为什么不使用伪随机数生成器来生成测试数据?

来自分类Dev

瓦拉中的伪随机数

来自分类Dev

伪随机数发生器

来自分类Dev

比较使用随机数生成的Matlab和Numpy代码

来自分类Dev

超出上限的随机数(在限制内)代码的生成

来自分类Dev

为什么从伪随机数生成器中只有0.000000?

来自分类Dev

在C ++ 11中使用哪个伪随机数生成器?

来自分类Dev

使用RNGCryptoServiceProvider通过加密安全的伪随机数生成盐

来自分类Dev

从四个整数生成无状态伪随机数

来自分类Dev

C ++伪随机数生成器线程安全吗?

来自分类Dev

PostgreSQL-如何在外键约束下生成随机数的伪数据行?

来自分类Dev

如何在Javascript中生成加密安全的伪随机数?

来自分类Dev

确保此处使用此伪随机数生成器是安全的