首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

OpenSSL::Random

公共类方法

egd(filename) → true 显示源

与:: egd_bytes相同,但默认查询255个字节。

代码语言:javascript
复制
static VALUE
ossl_rand_egd(VALUE self, VALUE filename)
{
    rb_check_safe_obj(filename);

    if (RAND_egd(StringValueCStr(filename)) == -1) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

egd_bytes(filename, length) → true 显示源

查询通过给定的套接字路径上的熵收集守护进程EGD filename

获取length字节数并使用:: add为OpenSSL内置的PRNG播种。

代码语言:javascript
复制
static VALUE
ossl_rand_egd_bytes(VALUE self, VALUE filename, VALUE len)
{
    int n = NUM2INT(len);

    rb_check_safe_obj(filename);

    if (RAND_egd_bytes(StringValueCStr(filename), n) == -1) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

load_random_file(filename) → true 显示源

读取字节filename并将它们添加到PRNG。

代码语言:javascript
复制
static VALUE
ossl_rand_load_file(VALUE self, VALUE filename)
{
    rb_check_safe_obj(filename);

    if(!RAND_load_file(StringValueCStr(filename), -1)) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

pseudo_bytes(length) → string 显示源

生成stringlength伪随机数字节。

如果伪随机字节序列具有足够的长度,则伪随机字节序列将是唯一的,但不一定是不可预测的。

代码语言:javascript
复制
OpenSSL::Random.pseudo_bytes(12)
#=> "..."
代码语言:javascript
复制
static VALUE
ossl_rand_pseudo_bytes(VALUE self, VALUE len)
{
    VALUE str;
    int n = NUM2INT(len);

    str = rb_str_new(0, n);
    if (RAND_pseudo_bytes((unsigned char *)RSTRING_PTR(str), n) < 1) {
        ossl_raise(eRandomError, NULL);
    }

    return str;
}

add(str, entropy) → self 显示源

将字节混合str成伪随机数发生器(PRNG)状态。

因此,如果来自str对手的数据不可预知,这会增加对状态的不确定性,并使PRNG输出更难预测。

entropy参数是(下限的)的多少随机性包含在估计str,以字节为单位。

代码语言:javascript
复制
pid = $$
now = Time.now
ary = [now.to_i, now.nsec, 1000, pid]
OpenSSL::Random.add(ary.join, 0.0)
OpenSSL::Random.seed(ary.join)
代码语言:javascript
复制
static VALUE
ossl_rand_add(VALUE self, VALUE str, VALUE entropy)
{
    StringValue(str);
    RAND_add(RSTRING_PTR(str), RSTRING_LENINT(str), NUM2DBL(entropy));

    return self;
}

random_bytes(length) → string 显示源

生成string具有length的加密的强伪随机数字节。

代码语言:javascript
复制
OpenSSL::Random.random_bytes(12)
#=> "..."
代码语言:javascript
复制
static VALUE
ossl_rand_bytes(VALUE self, VALUE len)
{
    VALUE str;
    int n = NUM2INT(len);
    int ret;

    str = rb_str_new(0, n);
    ret = RAND_bytes((unsigned char *)RSTRING_PTR(str), n);
    if (ret == 0) {
        ossl_raise(eRandomError, "RAND_bytes");
    } else if (ret == -1) {
        ossl_raise(eRandomError, "RAND_bytes is not supported");
    }

    return str;
}

seed(str) → str 显示源

:: seed相当于:: add其中entropy的长度是str

代码语言:javascript
复制
static VALUE
ossl_rand_seed(VALUE self, VALUE str)
{
    StringValue(str);
    RAND_seed(RSTRING_PTR(str), RSTRING_LENINT(str));

    return str;
}

status? → true | false 显示源

如果PRNG已经接收了足够的数据,则返回true,否则返回false。

代码语言:javascript
复制
static VALUE
ossl_rand_status(VALUE self)
{
    return RAND_status() ? Qtrue : Qfalse;
}

write_random_file(filename) → true 显示源

写入一些随机生成的字节(当前为1024),filename通过在以后的会话中调用:: load_random_file来初始化PRNG。

代码语言:javascript
复制
static VALUE
ossl_rand_write_file(VALUE self, VALUE filename)
{
    rb_check_safe_obj(filename);

    if (RAND_write_file(StringValueCStr(filename)) == -1) {
        ossl_raise(eRandomError, NULL);
    }
    return Qtrue;
}

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com