精华内容
下载资源
问答
  • java中死循环中如何判断一个变量的值不再发生改变,然后跳出死循环
  • ) [SQLSTATE 42000] (错误 3202) 在文件 "\\192.168.10.91\netdump\chisdb_netdump.bak" 上发生不可恢复的 I/O 错误: 64(指定的网络名不再可用。)。 [SQLSTATE 42000] (错误 3271) BACKUP DATABASE 正在异常终止。 ...
  • ![图片说明]... 远程访问MSSQL2008 上的数据库时 报错,本地访问这个远程数据库 正常,主机上的网站网站程序 远程访问 就报错。网上搜到不少方法,都用过了,不起作用。
  • OpenSSL随机数发生器 本文档对OpenSSL使用的随机数进行研究分析,主要涉及OpenSSL v0.9.8a的随机数发生器以及其在Windows系统下的熵源采集情况。 目录 1. 概况... 1 1.1 OpenSSL随机数发生器概况... 1 1.2 ...

    OpenSSL随机数发生器

    本文档对OpenSSL使用的随机数进行研究分析,主要涉及OpenSSL v0.9.8a的随机数发生器以及其在Windows系统下的熵源采集情况。

     

    目录

    1. 概况... 1

    1.1 OpenSSL随机数发生器概况... 1

    1.2 OpenSSL 0.9.8a的随机数发生器概述... 2

    2. 随机数发生器内部状态... 3

    3. 函数说明... 4

    3.1 ssleay_rand_cleanup置零... 4

    3.2 ssleay_rand_status状态信息... 4

    3.3 ssleay_rand_seed添加满熵种子... 5

    3.4 ssleay_rand_pseudo_bytes产生伪随机数... 5

    3.5 ssleay_rand_add添加熵信息... 6

    3.6 ssleay_rand_bytes产生随机数... 8

    4. 熵采集... 10

    4.1 RAND_poll在Windows下采集熵... 10

    4.2 RAND_poll在unix下采集熵... 14

     

     

     

     

     

    1. 概况

    1.1 OpenSSL随机数发生器概况

    OpenSSL不同版本使用的随机数发生器不太相同,主要差别在于:

    1. 非FIPS版本:默认使用OpenSSL内部集成的一款基于HASH算法(默认为SHA1)的随机数发生器;熵源则根据不同的系统有不同的生成方式。
    2. FIPS版本:使用NIST SP 800-90A的三种随机数发生器,熵源由调用者通过回调函数的方式从外部提供。

     

    非FIPS版本的熵源,根据不同的系统有不同的生成方式,

    1. Windows系统见.\crypto\rand\rand_win.c文件。
      1. 低版本的OpenSSL使用大量系统信息作为熵(本文研究重点)。
      2. 但高版本的则依赖于Windows系统提供的随机数,在Windows 7或更高版本中使用BCrypt代替了CryptoAPI。
    2. 其他系统的熵源生成方式均可见.\crypto\rand\文件夹。Linux系统使用系统提供的熵源,同样不同大版本使用的熵源差异较大。

    下表是OpenSSL几个不同版本使用的随机数发生器的概况。

    表1 OpenSSL不同版本使用的随机数发生器概况表

    版本

    随机数发生器

    Windows下熵源

    OpenSSL 0.9.8a

    自己定义一套随机数发生器

    见.\crypto\rand\md_rand.c

    使用大量系统信息

    OpenSSL 1.1.0

    同上

    仅使用Windows提供的随机数API,不再使用大量的系统信息。在Windows 7或更高版本中使用BCrypt代替了CryptoAPI。

    OpenSSL FIPS 2.0.11

    NIST SP 800-90A的三种随机数发生器

    见.\ fips\rand\目录

    外部提供

     

    本文研究OpenSSL 0.9.8a的随机数发生器以及熵源的详情。

    OpenSSL在Linux系统下使用的熵源可参见rand_unix.c文件。

    OpenSSL FIPS 2.0.11使用的NIST SP 800-90A的三种随机数发生器参见《NIST SP 800-90系列(随机数发生器)笔记》。

    1.2 OpenSSL 0.9.8a的随机数发生器概述

    内部默认的随机数发生器代码参见.\crypto\rand\md_rand.c文件,这里提供了随机数发生器的状态信息以及一系列的调用函数

    • ssleay_rand_seed                  添加种子
    • ssleay_rand_bytes                产生随机数据
    • ssleay_rand_cleanup             置零
    • ssleay_rand_add                   添加信息
    • ssleay_rand_pseudo_bytes         产生伪随机数据
    • ssleay_rand_status               获取状态信息

    熵源

    • RAND_poll                            不同版本使用不同的熵源产生方式

     

     

    2. 随机数发生器内部状态

    代码参见.\crypto\rand\md_rand.c文件

    随机数发生器的内部状态定义为全局变量(变量名与文件中描述对应),即下表的数据均为static型。

    STATE_SIZE 1023

    MD_DIGEST_LENGTH   默认使用SHA1算法,所以为20

    ENTROPY_NEEDED      所需的熵值,单位字节,值为32

     

    2随机数发生器内部状态

    数据

    长度

    类型

    含义

    state

    STATE_SIZE+

    MD_DIGEST_LENGTH字节

    BYTE

    内部状态数据,环形缓冲区。

    state_num

    4字节

    int

    内部状态实际有效字节数

    state_index <= state_num <= STATE_SIZE

    state_index

    4字节

    int

    缓冲区偏移量(当前应处理的内部状态位置)

    md

    MD_DIGEST_LENGTH字节

    BYTE

    上一次添加种子(即rand_add)处理得到的摘要值

    md_count[0]

    4字节

    long

    随机数生成函数rand_bytes的调用次数

    md_count[1]

    4字节

    long

    记录添加种子函数rand_add送入种子的累积分块数,每次送入的分块数是 向上取整(种子长度/分块长度)

    entropy

    8字节

    double

    熵值,单位字节。

    initialized

    1比特

    BOOL

    是否初始化

     

     

     

    3. 函数说明

    默认的随机数发生器的调用函数为(代码.\crypto\rand\md_rand.c

    1. ssleay_rand_cleanup             置零
    2. ssleay_rand_status               获取状态信息
    3. ssleay_rand_seed                 添加满熵种子
    4. ssleay_rand_add                  添加信息
    5. ssleay_rand_bytes                产生随机数据
    6. ssleay_rand_pseudo_bytes         产生伪随机数据

    熵源Windows下的代码.\crypto\rand\rand_win.c

    1. RAND_poll                            不同版本使用不同的熵源产生方式

    3.1 ssleay_rand_cleanup置零

    函    数:  void ssleay_rand_cleanup(void)

    功能描述:  置零

    说    明:  相当于init、uninit、reset

    注    意:  无

    参数说明:  无

    返 回 值:  无

    执行步骤:

    步骤1:内部状态全部清零/重置。

    3.2 ssleay_rand_status状态信息

    函    数:  int ssleay_rand_status(void)

    功能描述:  获取状态信息

    说    明:  无

    注    意:  无

    参数说明:  无

    返 回 值:  当前的熵值entropy是否大于32字节(256比特)

    执行步骤:

    步骤1:若未初始化(initialized0),执行采集系统熵信息的函数RAND_poll(),此函数将改变熵值entropy;并将initialized置为1

    步骤2:返回当前的熵值entropy是否大于32字节(256比特)。

    3.3 ssleay_rand_seed添加满熵种子

    函    数:  void ssleay_rand_seed(const void *buf, int num)

    功能描述:  添加满熵种子

    说    明:  无

    注    意:  这里认为种子是满熵的,所以将种子的熵值也设定为种子长度

    参数说明: 

         buf     (in)     种子

         num   (in)     种子的字节长度

    返 回 值:  无

    执行步骤:

    步骤1:直接调用ssleay_rand_add(buf, num, num)函数并返回。

    3.4 ssleay_rand_pseudo_bytes产生伪随机数

    函    数:  int ssleay_rand_pseudo_bytes(unsigned char *buf, int num)

    功能描述:  产生伪随机数

    说    明:  无

    注    意:  这里简单地设置两个函数ssleay_rand_pseudo_bytes和ssleay_rand_add是一样,其实应有差别。

    参数说明: 

         buf     (out)   伪随机数

         num   (in)     需要的伪随机数的字节长度

    返 回 值:  1 [成功],0 [失败]

    执行步骤:

    步骤1:直接调用ssleay_rand_add(buf, num, num)函数并返回。

    3.5 ssleay_rand_add添加熵信息

    函    数:  void ssleay_rand_add(const void *buf, int num, double add)

    功能描述:  添加熵信息

    说    明:  更新内部状态;默认的HASH函数为SHA1,输出长度为20字节。

    注    意:  添加信息的熵值(add)可为小数。

    参数说明: 

         buf     (in)     添加信息

         num   (in)     添加信息的字节长度

         add    (in)     添加信息的熵值,单位:字节。

    返 回 值:  无

    执行步骤:

    步骤1:更新state_num(状态的实际有效字节数)

    state_num =min(state_num + numSTATE_SIZE)

    步骤2:将输入数据buf以及内部状态中的环形缓冲区statestatestate_index起的num字节数据),分别按杂凑函数HASH的输出大小MD_DIGEST_LENGTH分割为n个块(最后一个分块可能为不完整分块):

    B0||B1||...||Bn-1=buf

    S0||S1||...||Sn-1=state[state_index,..., state_index+num-1]

    n=Ceil(num/MD_DIGEST_LENGTH)

    步骤3:local_md = md

    步骤4:对每个块i = 0,1,2,...,n-1 执行

        1. 4.1 计算杂凑值

    local_md = HASH (local_md ||Si||Bi||md_count[0]||md_count[1])

        1. 4.2 更新Si = Si local_md
        2. 4.3 更新md_count[1] = md_count[1]+1

    步骤5:用更新的Sii=0,1,2,...,n-1更新状态state

    state[state_index,..., state_index+num-1] = S0||S1||...||Sn-1

    步骤6:用最后得到的local_md更新md = mdlocal_md

    步骤7:更新熵值:entropy = min(32, entropy + add)。

     

    图中的简写

    C0md_count[0]

    C1即md_count[1]

    idx即state_index

     

    3.6 ssleay_rand_bytes产生随机数

    函    数:  int ssleay_rand_bytes(unsigned char *buf, int num)

    功能描述:  产生随机数

    说    明:  无

    注    意:  添加信息的熵值(add)可为小数。

    参数说明: 

         buf     (in)     添加信息

         num   (in)     添加信息的字节长度

         add    (in)     添加信息的熵值,单位:字节。

    返 回 值:  无

    执行步骤:

    步骤1:若未初始化(initialized为0),则执行RAND_poll()增加熵值。

    步骤2:计算几个基本记号

    L2 = MD_DIGEST_LENGTH/2

    L1 = MD_DIGEST_LENGTH

    n=Ceil(num/ L2 ),

    num_ceil = Ceil (num/ L)* L

    步骤3:若熵源池未搅拌(本函数内定义的静态变量stirred_pool),则执行m = Ceil(STATE_SIZE/ L1) 次添加熵信息

    rand_add("....................",L1, 0.0)。

    步骤4:local_md = md

    步骤5:将输出数据缓冲区buf以及内部状态中的环形缓冲区statestatestate_index起的num字节数据),分别L2分割为n=Ceil(num/ L2 )个块(最后一个分块可能为不完整分块):

    B0||B1||...||Bn-1=buf

    S0||S1||...||Sn-1=state[state_index,..., state_index+num-1]

    步骤6:for k = 0,1, 2,...,n-1,执行

        1. 6.1 设置字符串pad:若k为0,则pad = getpid(),否则,pad = NULL为空串。
        2. 6.2 计算杂凑值

    local_md = HASH( pad || local_md || md_count[0] || md_count[1] || Bi || Si)

    注意:Bi是输出缓冲区,但这里读取了其中的数据

        1. 6.3 更新SiBi

    Si = Si ⊕ local_md[0,..., L2-1]

    Bi = Bi ⊕ local_md[L2,..., L1-1]

    注意:这里没有更新md_count[0]md_count[1]的步骤。

    步骤7:更新md

    md = HASH(md_count[0] || md_count[1]|| local_md || md)

    步骤8:用更新的Sii=0,1,2,...,n-1更新状态state

    state[state_index,..., state_index+num-1] = S0||S1||...||Sn-1

    步骤9:更新state_index =( state_index + num_ceil )mod state_num

    步骤10:更新md_count[0] = md_count[0]+ 1;

    步骤11:输出随机数buf = B0||B1||...||Bn-1

     

    4. 熵采集

    熵采集函数为RAND_poll,它在不同操作系统下使用不同的熵源产生方式,Windows下的代码.\crypto\rand\rand_win.c

    此外,不同的OpenSSL版本中其熵采集方式也有较大出入。

    OpenSSL版本

    熵采集

    v0.9.8a

    使用了大量的各种信息,详情见本章后续部分。

    v1.1.0

    依赖于Windows提供的随机数,不再去采集各种信息。

    FIPS版本

    使用者自行提供熵,以回调函数方式设置,内部不提供熵。

     

    4.1 RAND_poll在Windows下采集熵

    作做熵源的信息包括下列信息。

    函    数:  int RAND_poll(void)

    功能描述:  采集各种熵源添加到内部状态

    说    明:  此为Windows版本

    注    意:  -

    参数说明:  无

    返 回 值:  无

    执行步骤:下面主要说明添加的各种信息

    信息1NetStatisticsGet45字节熵;netstatget17字节熵;

    NetStatisticsGet() is a Unicode only function, STAT_WORKSTATION_0 contains 45 fields and STAT_SERVER_0 contains 17 fields.

    NetStatisticsGet(NULL, L"LanmanWorkstation", 0, 0, &outbuf);

    RAND_add(outbuf, sizeof(STAT_WORKSTATION_0), 45);

     

    netstatget(NULL, L"LanmanServer", 0, 0, &outbuf);

    RAND_add(outbuf, sizeof(STAT_SERVER_0), 17);

     

    信息2Windows API 提供的随机数,熵值为sizeof(buf)字节

    1. 2.a如果BCryptGenRandom api存在,则执行,

    BCryptGenRandom(NULL, buf, sizeof(buf), flag)

    RAND_add(buf, sizeof(buf), sizeof(buf));

    这里flag = BCRYPT_USE_SYSTEM_PREFERRED_RNG

    1. 2.b否则,即BCryptGenRandom api不存在,则执行
      1. 2.b.1 windowsCryptGenRandom,熵值为0字节

    CryptAcquireContextW(&hProvider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))

    CryptGenRandom(hProvider, sizeof(buf), buf);

    RAND_add(buf, sizeof(buf), 0);

      1. 2.b.2 intelCryptGenRandom,熵值为sizeof(buf)字节

    CryptAcquireContextW(&hProvider, 0, INTEL_DEF_PROV, PROV_INTEL_SEC, 0))

    CryptGenRandom(hProvider, sizeof(buf), buf);

    RAND_add(buf, sizeof(buf), sizeof(buf));

    信息3windows句柄,熵值为0字节

    HWND h = GetForegroundWindow();

    RAND_add(&h, sizeof(h), 0);

    信息4:鼠标位置,熵值2字节

    GetCursorInfo(&ci);

    RAND_add(&ci, sizeof(CURSORINFO), 2);

    信息5GetQueueStatus状态,熵值1字节

    w = GetQueueStatus(QS_ALLEVENTS);

    RAND_add(&w, sizeof(w), 1);

    信息6:堆信息与遍历,熵值多字节

    HEAPLIST32 contains 3 fields that will change with each entry, Consider each field a source of 1 byte of entropy.

    HEAPENTRY32 contains 5 fields that will change with each entry, Consider each field a source of 1 byte of entropy.

    handle = CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);

    hlist.dwSize = sizeof(HEAPLIST32);       

    if (good) stoptime = GetTickCount() + MAXDELAY;(为避免时间过长,设置了一个时间阈值)

    if (Heap32ListFirst (handle, &hlist)){

          do{

                 RAND_add(&hlist, hlist.dwSize, 3);

                 hentry.dwSize = sizeof(HEAPENTRY32);

                 if (Heap32First(&hentry, hlist.th32ProcessID, hlist.th32HeapID)){

                       int entrycnt = 80;

                       do{

                             RAND_add(&hentry, hentry.dwSize, 5);

                       }while (heap_next(&hentry) && --entrycnt > 0);

                 }//end if

          } while (Heap32ListNext(handle, &hlist) && GetTickCount() < stoptime);

    }//end if

    信息7:进程信息遍历,熵值9字节/进程

    PROCESSENTRY32 contains 9 fields that will change with each entry. Consider each field a source of 1 byte of entropy.

    p.dwSize = sizeof(PROCESSENTRY32);

    if (good) stoptime = GetTickCount() + MAXDELAY;(为避免时间过长,设置了一个时间阈值)

    if (Process32First(handle, &p)){

          do

          {

                 RAND_add(&p, p.dwSize, 9);

          }while (Process32Next(handle, &p) && GetTickCount() < stoptime);

    }//end if

    信息8:线程信息遍历,熵值6字节/线程

    THREADENTRY32 contains 6 fields that will change with each entry. Consider each field a source of 1 byte of entropy.

    t.dwSize = sizeof(THREADENTRY32);

    if (good) stoptime = GetTickCount() + MAXDELAY;

    if (Thread32First(handle, &t)){

          do{

                 RAND_add(&t, t.dwSize, 6);

          }while (Thread32Next(handle, &t) && GetTickCount() < stoptime);

    }//end if

    信息9:模块遍历,熵值9字节/模块

    MODULEENTRY32 contains 9 fields that will change with each entry.  Consider each field a source of  1 byte of entropy.

    m.dwSize = sizeof(MODULEENTRY32);

    if (good) stoptime = GetTickCount() + MAXDELAY;

    if (Module32First(handle, &m)){

          do

          {

                 RAND_add(&m, m.dwSize, 9);

          }while (Module32Next(handle, &m) && (GetTickCount() < stoptime));

    }//end if

    信息10:时间信息,熵值1字节

    调用readtimer()获取时间信息加入RAND_add1.1.0版也在用。

    1. 优先调用 RDTSC,并增加RAND_add(,,1),即熵加1

    2. 上述步骤不可用则调用QueryPerformanceCounter,并增加RAND_add(,,0),即熵加0

    3. 上述步骤不可用则调用GetTickCount,并增加RAND_add(,,0),即熵加0

    信息11:内存状态信息,熵值1字节

    GlobalMemoryStatus Function Retrieves information about the system's current usage of both physical and virtual memory.

    GlobalMemoryStatus(&m); /*1.1.0版在用*/

    RAND_add(&m, sizeof(m), 1);

    信息12:进程ID,熵值1字节

    w = GetCurrentProcessId();/*1.1.0版在用*/

    RAND_add(&w, sizeof(w), 1);

     

    4.2 RAND_poll在unix下采集熵

    函数:int RAND_poll(void)

    使用系统提供的随机数作为熵源

    此外还如下信息

    RAND_add (PID,,0);

    RAND_add (UID,,0);

    RAND_add (time,,0);

     

    展开全文
  • (provider:TCP提供程序,error:0-指定的网络名不再可用。)(Microsoft SQL Server,错误:64) 众人反馈昨天还好好的,且没有做任何改变。于是找解决方法,网上搜了一把,大致说有两种原因。一是...

        问题的发生:今天处于公网的测试服务器数据库SQL SERVER 2008 在连接时突然报错:

        已成功与服务器建立连接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0-指定的网络名不再可用。)(Microsoft      SQL Server,错误:64)

    众人反馈昨天还好好的,且没有做任何改变。于是找解决方法,网上搜了一把,大致说有两种原因。一是使用SQL SERVER帐户登录时帐户没有权限,没有放开SQL SERVER帐户登录方式;二是服务端TCP/IP配置不对。解决办法对应也有相应的修改,有的说重启服务。但这些都不能解决我的问题。

           诊断方法,首先服务端可以使用SQL SERVER 用户登录数据库,原理和外网登录一样,这说明数据库配置没有任何问题。再有,外网可以使用telnet连通1433端口(也可能是配置成了别的端口),说明服务端TCP配置正确,且防火墙和安全配置已放行,否则根本连不通。

           再存细分析错误提示,前面说了已成功建立连接,也就说tcp连接是通,只是后续操作出错。再看错误的后一句,网络名不可用,似乎就是说客户端连接时提交的网络名有问题,或者是客户端连接时客户端所处的网络有说不清的问题。那我换一个网络试一下,找一台远程的机器,防火墙放开,连接服务器,一试果然能连通。说明本地网络那里设置了限制,那就重启一下路由器试一下,果然恢复了正常。

            具体路由器设置了什么限制,或者是路由器有什么bug在某种情况下发作了,也难以查清,总之重启路由器之后正常了。如果还不行的话,存细检查一下路由器配置项,是不是网管或者谁有意无意设置了什么选项,或者本网络的其它问题也会导致此错误。

     

    展开全文
  • type="text" value="我是默认值" onblur="if(this.value==''){this.value='我是默认值'}" onfocus="if(this.value=='我是默认值'){this.value=''}"/>
    <input type=
    "text"
     
    value=
    "我是默认值"
     
    onblur=
    "if(this.value==''){this.value='我是默认值'}"
     
    onfocus=
    "if(this.value=='我是默认值'){this.value=''}"
    />
    展开全文
  • 摘要:本文档对OpenSSL使用的随机数进行研究分析,主要涉及OpenSSL v0.9.8a的随机数发生器以及其在Windows系统下的熵源采集情况。     关键词:OpenSSL,密码模块,随机数发生器,密码算法,杂凑算法,熵。 1....

    摘要:本文档对OpenSSL使用的随机数进行研究分析,主要涉及OpenSSL v0.9.8a的随机数发生器以及其在Windows系统下的熵源采集情况。

     

     

    关键词:OpenSSL,密码模块,随机数发生器,密码算法,杂凑算法,熵。

    1. 概况

    1.1 OpenSSL随机数发生器概况

    OpenSSL不同版本使用的随机数发生器不太相同,主要差别在于:

    1. 非FIPS版本:默认使用OpenSSL内部集成的一款基于HASH算法(默认为SHA1)的随机数发生器;熵源则根据不同的系统有不同的生成方式。
    2. FIPS版本:使用NIST SP 800-90A的三种随机数发生器,熵源由调用者通过回调函数的方式从外部提供。

     

    非FIPS版本的熵源,根据不同的系统有不同的生成方式,

    1. Windows系统见.\crypto\rand\rand_win.c文件。
      1. 低版本的OpenSSL使用大量系统信息作为熵(本文研究重点)。
      2. 但高版本的则依赖于Windows系统提供的随机数,在Windows 7或更高版本中使用BCrypt代替了CryptoAPI。
    2. 其他系统的熵源生成方式均可见.\crypto\rand\文件夹。Linux系统使用系统提供的熵源,同样不同大版本使用的熵源差异较大。

    下表是OpenSSL几个不同版本使用的随机数发生器的概况。

    表1 OpenSSL不同版本使用的随机数发生器概况表

    版本

    随机数发生器

    Windows下熵源

    OpenSSL 0.9.8a

    自己定义一套随机数发生器

    见.\crypto\rand\md_rand.c

    使用大量系统信息

    OpenSSL 1.1.0

    同上

    仅使用Windows提供的随机数API,不再使用大量的系统信息。在Windows 7或更高版本中使用BCrypt代替了CryptoAPI。

    OpenSSL FIPS 2.0.11

    NIST SP 800-90A的三种随机数发生器

    见.\ fips\rand\目录

    外部提供

     

    本文研究OpenSSL 0.9.8a的随机数发生器以及熵源的详情。

    OpenSSL在Linux系统下使用的熵源可参见rand_unix.c文件。

    OpenSSL FIPS 2.0.11使用的NIST SP 800-90A的三种随机数发生器参见《NIST SP 800-90系列(随机数发生器)笔记》。

    1.2 OpenSSL 0.9.8a的随机数发生器概述

    内部默认的随机数发生器代码参见.\crypto\rand\md_rand.c文件,这里提供了随机数发生器的状态信息以及一系列的调用函数

    • ssleay_rand_seed                  添加种子
    • ssleay_rand_bytes                产生随机数据
    • ssleay_rand_cleanup             置零
    • ssleay_rand_add                   添加信息
    • ssleay_rand_pseudo_bytes         产生伪随机数据
    • ssleay_rand_status               获取状态信息

    熵源

    • RAND_poll                            不同版本使用不同的熵源产生方式

     

     

    2. 随机数发生器内部状态

    代码参见.\crypto\rand\md_rand.c文件

    随机数发生器的内部状态定义为全局变量(变量名与文件中描述对应),即下表的数据均为static型。

    STATE_SIZE 1023

    MD_DIGEST_LENGTH   默认使用SHA1算法,所以为20

    ENTROPY_NEEDED      所需的熵值,单位字节,值为32

     

    2随机数发生器内部状态

    数据

    长度

    类型

    含义

    state

    STATE_SIZE+

    MD_DIGEST_LENGTH字节

    BYTE

    内部状态数据,环形缓冲区。

    state_num

    4字节

    int

    内部状态实际有效字节数

    state_index <= state_num <= STATE_SIZE

    state_index

    4字节

    int

    缓冲区偏移量(当前应处理的内部状态位置)

    md

    MD_DIGEST_LENGTH字节

    BYTE

    上一次添加种子(即rand_add)处理得到的摘要值

    md_count[0]

    4字节

    long

    随机数生成函数rand_bytes的调用次数

    md_count[1]

    4字节

    long

    记录添加种子函数rand_add送入种子的累积分块数,每次送入的分块数是 向上取整(种子长度/分块长度)

    entropy

    8字节

    double

    熵值,单位字节。

    initialized

    1比特

    BOOL

    是否初始化

     

     

     

    展开全文
  • 在构建某个maven项目的时候发生了异常,遇到以下错误,理论上是由于没有指定JAVA版本导致的。 - [ERROR] 不再支持源选项 5。请使用 6 或更高版本。。。 - [ERROR] 不再支持目标选项 1.5。请使用 1.6 或更高版本。。...
  • 以前都用的好好的,今天在使用的时候竟然报:在从服务器接收结果时发生传输级错误。(provider:TCP提供程序,error:0-提定的网络名不再可用)的错误,还以为是服务器有问题了,一翻检查后确认服务器没有问题。又以为是列...
  • 看了高赞回答说是加速器影响了但改了一堆LSP设置还是没用。 直接改端口号这个问题就解决了 方法如下 (1) 使用“network.tcpport”的“set”命令以根用户身份运行 mssql-conf 脚本: sudo /opt/mssql/bin/...
  • (provider: TCP Provider, error: 0 - 指定的网络名不再可用。) 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) 在 System.Data.SqlClient....
  • 最近几天发现连sql数据库服务器的时候,总是提示“在从服务器接收结果时发生传输级错误。 (provider: TCP Provider, error: 0 - 指定的网络名不再可用。)”的错误。 网上找了很多解决方案,都没有解决,后来一步...
  • Windows 有一天忽然开始报 “脚本错误 当前页面的脚本发生错误” 警告窗口: 不管点 “是” 还是 “否”,电脑使用一段时间以后还是会弹这个烦人的框。 按照搜索来的解决办法,禁用 IE 的脚本调试选项: 不起...
  • vs2010 nuget 基础连接已经关闭:发送时发生错误

    万次阅读 多人点赞 2020-06-19 16:42:41
    在vs2010中用nuget联机安装CefSharp包时,出现“基础连接已经关闭:发送时发生错误”。后来打开nuget官网,发现nuget不再支持tls1.0和1.1,猜测是tls的问题。 .net4下的注册表修改,将以下内容存为reg,双击导入 ...
  • 基于FPGA的正弦信号发生器设计

    千次阅读 2019-12-07 13:23:06
    用FPGA做正弦信号发生器是我上大学期间在实验室里做的,主要用的ROM-IP和DA数模转化芯片,将数字信号转为模拟信号后,通过示波器进行显示。 我记得当时用FPGA做了正弦、三角波、方波信号,然后通过DA输出在示波器上...
  • 注:个人经验,希望可以帮到你喽...试了这么多还是不行,最后查到原因是我本机开着server2012的虚拟机,它的网络适配器的模式为NAT模式,修改为桥接模式,又试了下,终于可以了,苍天啊,都要开始怀疑自己的人品了:)
  • iOS7.1:企业部署HTTP方式不再有效

    万次阅读 2014-03-13 14:32:53
    2 天前,iOS7.1正式...尽管这样的事情并不是第一次发生,但是我们在 iOS7.1 上测试的结果表明,苹果再次对开发者们下“黑手”了。通过Xcode Organizer查看7.1设备上的控制台,我们得到了如下信息:Could not load no
  • 在iPhone真机上运行App时,弹出App"不再可用"提示框: 上图分别显示了中文和英文环境下对应的出错信息。 那么,发生该错误的原因是什么?我们又该如何解决它呢? 别急,让我们娓娓道来… ???? 问题分析 1. 从App的...
  • AppScan发生内部错误解决办法

    千次阅读 2018-07-19 10:17:50
    AppScan发生内部错误,重装软件,重装系统亦如此 查log信息,C:\Users\XX(自己的用户)\AppData\Roaming\IBM\AppScan Standard\Logs,里面拿到SdkDebug.log 到微软下载完整版.NetFramework4.6.2手动安装,然后...
  • 本文主要记述,本人使用Tektronix(泰克)的 AFG3101 型号的任意函数发生器(Arbitrary Function Generator) 和 AWG520 型号的任意波形发生器 (Arbitrary Waveform Generator)的一些经验方法,介绍了自己想到的...
  • 如何避免损失20亿的删库事件再次发生

    千次阅读 多人点赞 2020-03-03 14:45:23
    这些数据不再是单一的结构化数据,出现了大量文档、音频和视频数据,数据量级是TB级的。 硬件日志数据:进入万物互联的时代,大量机器传感器,IOT设备都会产生大量数据。这些设备 7*24小时产生数据,数据格式也是...
  • 2019 年 AI 领域都发生了什么?

    万次阅读 多人点赞 2019-12-26 19:01:01
    《生成式深度学习》(Generative Deep Learning)(O’ Reilly Media 2019 年出版)一书作者 David Foster 为我们进行了回顾,对人工智能世界在这一年来发生的事情进行了大盘点。 2019 年无疑是忙碌的一年。人工...
  • 五种常用的随机数发生器-matlab实现

    千次阅读 2020-05-17 15:22:25
    五种常用的随机数发生器包括平方取中发生器、乘积取中发生器、线性同余发生器、常数乘子发生器和斐波那契发生器。 平方取中发生器 clc clear all close all % 调用函数---参数可修改 [x0,u0] = Square_mid_rand...
  • nuget 基础连接已经关闭:发送时发生错误

    千次阅读 热门讨论 2020-07-11 11:57:56
    在vs2012中用nuget联机安装Oracle.ManagedDataAccess.dll包时,出现“基础连接已经关闭:发送时发生错误”。后来打开nuget官网,发现nuget不再支持tls1.0和1.1,猜测是tls的问题。 参考这位老哥的做法:...
  • 浅谈随机数发生

    万次阅读 2013-12-19 01:51:28
    我们平时所使用的无论什么编程语言都会提供一个随机数函数,而且它是伪随机数(Pseudo Random Number),它是由算法...还有一种是产生随机数的发生器是密码学伪随机数发生器(Cryptographically Secure Pseudo-Random
  • JQuery拦截html元素发生默认行为

    千次阅读 2019-07-22 20:06:56
    但有些时候我们想要阻止元素发生默认行为,就要用到 preventDefault() 方法。 语法: event.preventDefault() 参数: event:必需。event 参数来自事件绑定函数。 检查 有时候,我们并不确定指定的事件上是否调用了 ...
  • 很多小朋友使用真空发生器,但是不知道怎么接电线。 下面小田来带大家了解一下。 首先了解真空发生器的工作方式: 1. 形成真空。 2. 破坏真空 为了检测拉瓦尔管是否形成了我们所需要的真空度,再加上一...
  • iOS 11导航栏高度发生变化的问题

    千次阅读 2017-11-15 09:57:10
    iOS 11里,在导航栏直接设置searchbar为titleView,由于searchbar本身的圆角效果,会导致searchbar的高度变的比设计的要大,进而导致navigationbar的高度也发生变化,不再是最初的44.,可以使用下面的方法来解决这个...
  • 2、根据错误提示,在conf和httpd-assl文件里更改了n处地址,直到不再有错误提示 3、运行,出现“发生服务特定错误 1” “错误***” 4、把下载下来的apache22,放在根目录下,更改环境变量,运行,问题解决。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 720,538
精华内容 288,215
关键字:

不再发生还是不再发生