---
title: "哈希函数与随机数"
description: "上课笔记"
canonical_url: "https://yangqiuyi.com/blog/suan-fa/ha-xi-han-shu-yu-sui-ji-shu"
---

> Index of every page on this site: [llms.txt](https://yangqiuyi.com/llms.txt)

上课笔记

## 哈希函数和随机数

### 哈希函数

#### 长度

md5 32个字符长度
sha1 128 个字符长度 (常用)

要求：`明文小改，hash大变`

#### 设计

##### 迭代

1. 消息填充为512倍数（最后几位是 消息长度mod 512）
2. 等分
3. 迭代

第一代 sha1
第二代 sha256 sha512
第三代 keccak

### 随机数

#### 性质

1. 随机性————不存在统计学偏差，完全杂乱的序列（弱随机）<span>

线性同余法可以生成

</span>
2. 不可预测性———不能从过去的数列推测出下一个出现的数（强伪随机）
3. 不可重现性———除非保存序列本身，否则不能重现相同序列（真随机）

1，2 是伪随机数，但是具有“图灵不可区分”，也就是以假乱真

满足下面的一定满足下面的，满足上面的不一定满足下面的

#### 生成器

软件不可生成真随机数，必须有硬件参与（内部状态相同，所以可以产生相同随机数列）
而且软件生成的随机数在某一时刻必然重复，此为周期

可用鼠标位置，键盘输入间隔，热噪声产生不可重现的随机数（真随机数）

##### 伪随机数生成器

种子 ->（内部状态=有限自动机=一种算法）伪随机数生成器 -> 伪随机数列
同一个种子(key)，产生的随机数相同

###### 线性同余法

<span className="katex">
<span className="katex-mathml">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<semantics>
<mrow>
<msub>
<mi>

R

</mi>

<mrow>
<mi>

i

</mi>

<mo>

+

</mo>

<mn>

1

</mn>
</mrow>
</msub>

<mo>

=

</mo>

<mo stretchy="false">

(

</mo>

<mi>

A

</mi>

<mo>

∗

</mo>

<msub>
<mi>

R

</mi>

<mi>

i

</mi>
</msub>

<mo>

+

</mo>

<mi>

C

</mi>

<mo stretchy="false">

)

</mo>

<mi>

m

</mi>

<mi>

o

</mi>

<mi>

d

</mi>

<mi>

M

</mi>
</mrow>

<annotation encoding="application/x-tex">

R_{i+1}=(A*R_{i}+C) mod M

</annotation>
</semantics>
</math>
</span>

<span className="katex-html" ariaHidden="true">
<span className="base">
<span className="strut" style="height:0.8917em;vertical-align:-0.2083em;">



</span>

<span className="mord">
<span className="mord,mathnormal" style="margin-right:0.0077em;">

R

</span>

<span className="msupsub">
<span className="vlist-t,vlist-t2">
<span className="vlist-r">
<span className="vlist" style="height:0.3117em;">
<span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;">
<span className="pstrut" style="height:2.7em;">



</span>

<span className="sizing,reset-size6,size3,mtight">
<span className="mord,mtight">
<span className="mord,mathnormal,mtight">

i

</span>

<span className="mbin,mtight">

+

</span>

<span className="mord,mtight">

1

</span>
</span>
</span>
</span>
</span>

<span className="vlist-s">

​

</span>
</span>

<span className="vlist-r">
<span className="vlist" style="height:0.2083em;">
<span>



</span>
</span>
</span>
</span>
</span>
</span>

<span className="mspace" style="margin-right:0.2778em;">



</span>

<span className="mrel">

=

</span>

<span className="mspace" style="margin-right:0.2778em;">



</span>
</span>

<span className="base">
<span className="strut" style="height:1em;vertical-align:-0.25em;">



</span>

<span className="mopen">

(

</span>

<span className="mord,mathnormal">

A

</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>

<span className="mbin">

∗

</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>
</span>

<span className="base">
<span className="strut" style="height:0.8333em;vertical-align:-0.15em;">



</span>

<span className="mord">
<span className="mord,mathnormal" style="margin-right:0.0077em;">

R

</span>

<span className="msupsub">
<span className="vlist-t,vlist-t2">
<span className="vlist-r">
<span className="vlist" style="height:0.3117em;">
<span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;">
<span className="pstrut" style="height:2.7em;">



</span>

<span className="sizing,reset-size6,size3,mtight">
<span className="mord,mtight">
<span className="mord,mathnormal,mtight">

i

</span>
</span>
</span>
</span>
</span>

<span className="vlist-s">

​

</span>
</span>

<span className="vlist-r">
<span className="vlist" style="height:0.15em;">
<span>



</span>
</span>
</span>
</span>
</span>
</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>

<span className="mbin">

+

</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>
</span>

<span className="base">
<span className="strut" style="height:1em;vertical-align:-0.25em;">



</span>

<span className="mord,mathnormal" style="margin-right:0.0715em;">

C

</span>

<span className="mclose">

)

</span>

<span className="mord,mathnormal">

m

</span>

<span className="mord,mathnormal">

o

</span>

<span className="mord,mathnormal">

d

</span>

<span className="mord,mathnormal" style="margin-right:0.109em;">

M

</span>
</span>
</span>
</span>


假设A=3,C=0,M=7,种子等于6，结果：
4 5 1 3 2 6 4 5 1 3 2 6... 周期为6
谨慎选择A,C,M可以产生具有随机性的数列

> java和C库都是线性同余法

算法公开，种子保密，知道上一个，就算得出下一个

###### 单向hash函数法

<span className="katex">
<span className="katex-mathml">
<math xmlns="http://www.w3.org/1998/Math/MathML">
<semantics>
<mrow>
<msub>
<mi>

R

</mi>

<mrow>
<mi>

i

</mi>

<mo>

+

</mo>

<mn>

1

</mn>
</mrow>
</msub>

<mo>

=

</mo>

<mi>

h

</mi>

<mi>

a

</mi>

<mi>

s

</mi>

<mi>

h

</mi>

<mo stretchy="false">

(

</mo>

<msub>
<mi>

R

</mi>

<mi>

i

</mi>
</msub>

<mo>

+

</mo>

<mi>

D

</mi>

<mi>

a

</mi>

<mi>

t

</mi>

<mi>

e

</mi>

<mo stretchy="false">

)

</mo>
</mrow>

<annotation encoding="application/x-tex">

R_{i+1}=hash(R_i+Date)

</annotation>
</semantics>
</math>
</span>

<span className="katex-html" ariaHidden="true">
<span className="base">
<span className="strut" style="height:0.8917em;vertical-align:-0.2083em;">



</span>

<span className="mord">
<span className="mord,mathnormal" style="margin-right:0.0077em;">

R

</span>

<span className="msupsub">
<span className="vlist-t,vlist-t2">
<span className="vlist-r">
<span className="vlist" style="height:0.3117em;">
<span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;">
<span className="pstrut" style="height:2.7em;">



</span>

<span className="sizing,reset-size6,size3,mtight">
<span className="mord,mtight">
<span className="mord,mathnormal,mtight">

i

</span>

<span className="mbin,mtight">

+

</span>

<span className="mord,mtight">

1

</span>
</span>
</span>
</span>
</span>

<span className="vlist-s">

​

</span>
</span>

<span className="vlist-r">
<span className="vlist" style="height:0.2083em;">
<span>



</span>
</span>
</span>
</span>
</span>
</span>

<span className="mspace" style="margin-right:0.2778em;">



</span>

<span className="mrel">

=

</span>

<span className="mspace" style="margin-right:0.2778em;">



</span>
</span>

<span className="base">
<span className="strut" style="height:1em;vertical-align:-0.25em;">



</span>

<span className="mord,mathnormal">

ha

</span>

<span className="mord,mathnormal">

s

</span>

<span className="mord,mathnormal">

h

</span>

<span className="mopen">

(

</span>

<span className="mord">
<span className="mord,mathnormal" style="margin-right:0.0077em;">

R

</span>

<span className="msupsub">
<span className="vlist-t,vlist-t2">
<span className="vlist-r">
<span className="vlist" style="height:0.3117em;">
<span style="top:-2.55em;margin-left:-0.0077em;margin-right:0.05em;">
<span className="pstrut" style="height:2.7em;">



</span>

<span className="sizing,reset-size6,size3,mtight">
<span className="mord,mathnormal,mtight">

i

</span>
</span>
</span>
</span>

<span className="vlist-s">

​

</span>
</span>

<span className="vlist-r">
<span className="vlist" style="height:0.15em;">
<span>



</span>
</span>
</span>
</span>
</span>
</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>

<span className="mbin">

+

</span>

<span className="mspace" style="margin-right:0.2222em;">



</span>
</span>

<span className="base">
<span className="strut" style="height:1em;vertical-align:-0.25em;">



</span>

<span className="mord,mathnormal" style="margin-right:0.0278em;">

D

</span>

<span className="mord,mathnormal">

a

</span>

<span className="mord,mathnormal">

t

</span>

<span className="mord,mathnormal">

e

</span>

<span className="mclose">

)

</span>
</span>
</span>
</span>



###### 密码法

###### ANSI X9.17 (美国的标准)

###### 梅森算法

###### java

1. Java.util.random
2. Java.security.Secure.Random

#### 攻击

攻击随机数使用环境

##### 随机数池

随机数不是使用时产生的，提前产生放在池中，所以呀，要保护随机数池，一般也会选择攻击随机数池

#### 标准

##### 随机性能监测

1. 《中华人民共和国密码行业标准》
2. NIST SP800-22（2010-04）

  - Tips：网上有软件
3. 民政部关于随机数的标准

  - MZ/T 093-2017 中国福利彩票系统彩票随机数检验规范

## Sitemap

See the full [sitemap](https://yangqiuyi.com/sitemap.md) for all pages.
