非常教程

Ruby 2.4参考手册

OpenSSL

OpenSSL::Random

公共类方法

egd(filename) → true 显示源

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

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播种。

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。

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伪随机数字节。

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

OpenSSL::Random.pseudo_bytes(12)
#=> "..."
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,以字节为单位。

pid = $$
now = Time.now
ary = [now.to_i, now.nsec, 1000, pid]
OpenSSL::Random.add(ary.join, 0.0)
OpenSSL::Random.seed(ary.join)
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的加密的强伪随机数字节。

OpenSSL::Random.random_bytes(12)
#=> "..."
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

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。

static VALUE
ossl_rand_status(VALUE self)
{
    return RAND_status() ? Qtrue : Qfalse;
}

write_random_file(filename) → true 显示源

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

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;
}

OpenSSL相关

1.OpenSSL::ASN1
2.OpenSSL::ASN1::ASN1Data
3.OpenSSL::ASN1::ASN1Error
4.OpenSSL::ASN1::Constructive
5.OpenSSL::ASN1::ObjectId
6.OpenSSL::ASN1::Primitive
7.OpenSSL::BN
8.OpenSSL::BNError
9.OpenSSL::Buffering
10.OpenSSL::Cipher
11.OpenSSL::Cipher::Cipher
12.OpenSSL::Config
13.OpenSSL::ConfigError
14.OpenSSL::Digest
15.OpenSSL::Digest::DigestError
16.OpenSSL::Engine
17.OpenSSL::Engine::EngineError
18.OpenSSL::ExtConfig
19.OpenSSL::HMAC
20.OpenSSL::HMACError
21.OpenSSL::Netscape
22.OpenSSL::Netscape::SPKI
23.OpenSSL::Netscape::SPKIError
24.OpenSSL::OCSP
25.OpenSSL::OCSP::BasicResponse
26.OpenSSL::OCSP::CertificateId
27.OpenSSL::OCSP::OCSPError
28.OpenSSL::OCSP::Request
29.OpenSSL::OCSP::Response
30.OpenSSL::OCSP::SingleResponse
31.OpenSSL::OpenSSLError
32.OpenSSL::PKCS12
33.OpenSSL::PKCS5
34.OpenSSL::PKCS5::PKCS5Error
35.OpenSSL::PKCS7
36.OpenSSL::PKCS7::RecipientInfo
37.OpenSSL::PKCS7::SignerInfo
38.OpenSSL::PKey
39.OpenSSL::PKey::DH
40.OpenSSL::PKey::DHError
41.OpenSSL::PKey::DSA
42.OpenSSL::PKey::DSAError
43.OpenSSL::PKey::EC
44.OpenSSL::PKey::EC::Group
45.OpenSSL::PKey::EC::Point
46.OpenSSL::PKey::PKey
47.OpenSSL::PKey::PKeyError
48.OpenSSL::PKey::RSA
49.OpenSSL::PKey::RSAError
50.OpenSSL::SSL
51.OpenSSL::SSL::Session
52.OpenSSL::SSL::SocketForwarder
53.OpenSSL::SSL::SSLContext
54.OpenSSL::SSL::SSLError
55.OpenSSL::SSL::SSLServer
56.OpenSSL::SSL::SSLSocket
57.OpenSSL::X509::Attribute
58.OpenSSL::X509::Certificate
59.OpenSSL::X509::CRL
60.OpenSSL::X509::Extension
61.OpenSSL::X509::ExtensionFactory
62.OpenSSL::X509::Name
63.OpenSSL::X509::Name::RFC2253DN
64.OpenSSL::X509::Request
65.OpenSSL::X509::Revoked
66.OpenSSL::X509::Store
67.OpenSSL::X509::StoreContext
Ruby 2.4

Ruby 是一种面向对象、命令式、函数式、动态的通用编程语言,是世界上最优美而巧妙的语言。

主页 https://www.ruby-lang.org/
源码 https://github.com/ruby/ruby
版本 2.4
发布版本 2.4.1

Ruby 2.4目录

1.缩略 | Abbrev
2.ARGF
3.数组 | Array
4.Base64
5.基本对象 | BasicObject
6.基准测试 | Benchmark
7.BigDecimal
8.绑定 | Binding
9.CGI
10.类 | Class
11.比较 | Comparable
12.负责 | Complex
13.计算续体 | Continuation
14.覆盖 | Coverage
15.CSV
16.日期 | Date
17.日期时间 | DateTime
18.DBM
19.代理 | Delegator
20.摘要 | Digest
21.Dir
22.DRb
23.编码 | Encoding
24.枚举 | Enumerable
25.枚举 | Enumerator
26.ENV
27.ERB
28.错误 | Errors
29.Etc
30.期望值 | Exception
31.错误类 | FalseClass
32.Fiber
33.Fiddle
34.文件 | File
35.文件实用程序 | FileUtils
36.查找 | Find
37.浮点 | Float
38.Forwardable
39.GC
40.GDBM
41.GetoptLong
42.Hash
43.Integer
44.IO
45.IPAddr
46.JSON
47.Kernel
48.语言 | 3Language
49.记录 | Logger
50.编排 | Marshal
51.MatchData
52.数学 | Math
53.矩阵 | Matrix
54.方法 | Method
55.模型 | Module
56.监控 | Monitor
57. 互斥 | Mutex
58.Net
59.Net::FTP
60.Net::HTTP
61.Net::IMAP
62.Net::SMTP
63.NilClass
64.数字 | Numeric
65.对象 | Object
66.ObjectSpace
67.Observable
68.Open3
69.OpenSSL
70.OpenStruct
71.OpenURI
72.OptionParser
73.路径名 | Pathname
74.完整输出 | PrettyPrint
75.Prime
76.Proc
77.过程 | Process
78.PStore
79.PTY
80.队列 | Queue
81.随机 | Random
82.范围 | Range
83.合理的 | Rational
84.Readline
85.Regexp
86.Resolv
87.Ripper
88.RubyVM
89.Scanf
90.SDBM
91.SecureRandom
92.Set
93.Shell
94.信号 | Signal
95.Singleton
96.套接字 | Socket
97.字符串 | String
98.StringIO
99.StringScanner
100.结构 | Struct