在密码技术中,随机序列是非常重要的,比如密钥产生、数字签名、身份认证和众多的密码学协议等都要用到随机序列。所以产生高质量的随机数序列对信息的安全性具有十分重要的作用。随机数分为真随机数和伪随机数,计算机通过算法产生的随机数并不上真正意义上的随机数,很容易被破解,只能称为伪随机数。若要产生真正的随机数,必须通过硬件来实现,比如使用离子辐射事件的脉冲检测器、气体放电管和带泄露的电容等,但是为每台计算机配备这样的装置上不可能。下面将两种常见的随机算法:线性同余和RSA算法。
1、线性同余
Ni+1=(A*Ni+B)mod M 其中i=0,1,…,M-1
要求:B,M互为质数;M的所有质因子的积能整除A-1;若M是4的倍数A-1也是;A,B,N0都比M小;A,B是正整数(根据此公式可以递推出随机数,有兴趣的可以推倒一下)
因此,取A=7^5;B=0;M=2^31-1; N0为系统时间;满足B=0,M=2^31-1互为质数;M=2^31-1的所有质因子的积能整除A-1=7^5-1;若M是4的倍数A-1也是;A,B,N0都比M小;A,B是正整数。
实现:
package org.mino.random; /** * @author DingJie * @date 2014-5-1 * @email dingjie_nlp@126.com */ public class LineRmainderRandom { private static long initSeed = System.currentTimeMillis(); /** * @param args */ public static void main(String[] args) { for (int i = 0; i < 100; i++) { getRand (); } } private static void getRand () { initSeed = (initSeed * 16807L) % ((1 << 31) - 1); System.out.println(initSeed); } }其实java.util.Random类中使用的就是线性同余方法:
protected int next(int bits) { long oldseed, nextseed; AtomicLong seed = this.seed; do { oldseed = seed.get(); nextseed = (oldseed * multiplier + addend) & mask; } while (!seed.compareAndSet(oldseed, nextseed)); return (int)(nextseed >>> (48 - bits)); }2、RSA伪随机数方法
RSA是依据依旧是一个满足一定条件的数学公式
设A从2~(N-1) C=(A EXP D) mod N满足如下条件:D是素数,N是两个素数(P,Q)之积, (D * E) mod ((P-1) * (Q-1))=1 因为:若 C=(A EXP D)mod N 有:A=(C EXP E) mod N 所以,C与A 一一对应;设N=15,P=5,Q=3则A为2到14的数。现在要产生2到14的伪随机数。取D为3,E为3,
C2=(2EXP3)mod15 = 8,
C3=(3EXP3)mod 15 = 12,
C4 = (4EXP3)mod 15= 4,
C5 = (5EXP3)mod 15= 5,
C6 = (6EXP3)mod 15= 6,
C7 = (7EXP3)mod 15= 13,
C8 = (8EXP3)mod 15= 2,
C9 = (9EXP3)mod 15= 9,
C10 = (10EXP3)mod 15= 10,
C11 = (11EXP3)mod 15= 11,
C12 = (12EXP3)mod 15= 3,
C13 = (13EXP3)mod 15= 7,
C14 = (14EXP3)mod 15= 14
相关推荐
本篇文档详细分析了几种常见的伪随机数生成算法,并对其特征进行了比较,以下是文档中提及的几个核心知识点。 首先,文档指出在计算机上产生随机数列的通用方法是使用数学算法,这与真正从均匀分布中抽取的随机数...
综上所述,"基于3-DES算法的伪随机数生成器"是一个利用3-DES算法创建高质量随机数种子的工具,适用于需要高安全性和随机性的应用场景,如加密通信、密码生成等。该软件遵循ANSIX9.17标准,确保了生成的随机数在金融...
伪随机数生成器(Pseudo-Random Number Generator,简称PRNG)是一种数学算法,它能够产生一系列看似随机的数,但实际上这些数是确定性的。也就是说,给定一个初始种子(或称为状态),伪随机数生成器将按照特定的...
本文将介绍一种使用线性叠加法实现伪随机数生成的算法,并对其原理和实现进行详细的解释。 伪随机数函数的原理 伪随机数函数的原理基于线性叠加法。该算法使用两个常数A和C,通过乘法和加法操作生成伪随机数。具体...
- **Box-Muller算法**是一种从均匀分布的伪随机数生成正态分布随机数的有效方法。该算法利用了极坐标变换的思想,能够高效地产生标准正态分布的随机数。 #### 2.2 基于Cholesky分解的方法 - **Cholesky分解**是一...
从给定的文件信息来看,主要讨论的是两个不同的领域:一是关于Mg-Li合金及其表面处理的问题,另一个是蒙特卡洛法在产生伪随机数中的应用。然而,根据题目要求,我们将集中讨论“蒙特卡洛产生伪随机数”的相关知识点...
迭代取中法是一种生成伪随机数的算法,例如平方取中法。这种方法的基本思想是通过反复对某个初始值进行迭代操作,然后取中间部分作为随机数。虽然这种方法可以产生近似的均匀分布,但它可能存在退化问题,即容易产生...
中间提取法是一种设计伪随机数生成器的方法,它基于一个初始种子(seed)生成一系列看似随机的整数。这种方法的优点在于其灵活性和可调整性,可以产生具有优良统计性质的随机数序列。 首先,我们需要了解C语言中的`...
总的来说,这个"C#伪随机数加密完整源码2019"项目可能涵盖了C#编程、伪随机数生成、加密算法实现、以及可能的XML操作等多个知识点。学习这个项目,开发者不仅可以提升加密解密技能,还能增强对C#编程和文件处理的...
**线性同余法**是一种更为常见的伪随机数生成算法。它通常表示为:`Xn+1 = (a * Xn + c) mod m`,其中`Xn`是当前的伪随机数,`Xn+1`是下一个伪随机数,`a`、`c`和`m`是预先选定的常数。这个公式确保了序列的周期性和...
生成正态分布的伪随机数通常有两种方法:Box-Muller变换和Ziggurat算法。 1. **Box-Muller变换**: 这是一种利用两个独立均匀分布的伪随机数生成正态分布随机数的方法。假设我们有两个独立的U1和U2,它们分别服从...
本项目结合了这两种技术,通过LSFR(Linear Shift Register,线性移位寄存器)生成伪随机数,并使用RC4(Rivest Cipher 4)流加密算法进行数据加密。 首先,我们来看LSFR。LSFR是一种基于线性反馈移位寄存器的PRNG...
在C#编程语言中,伪随机数生成器...这个"十分经典"的C#伪随机数加密源码很可能是对上述一种或多种技术的实际应用,通过阅读和分析,我们可以深入了解C#中如何实现安全的加密算法,并从中学习如何改进和优化我们的代码。
本文将深入探讨一种特殊的伪随机数生成器——“基于混沌的伪随机数生成器”,并关联其与混沌理论以及序列密码的相关知识。 混沌理论是数学和物理学的一个分支,它研究的是看似随机但其实具有确定性的复杂动态系统。...
伪随机数并不是真正的随机数,它们是由确定性的算法计算得出的,但是这些数在统计上具有类似于真正随机数的性质。在计算机科学中,由于真随机数的生成成本较高,通常会使用伪随机数生成器(PRNG)来代替。 GGD伪...
本文将深入探讨如何利用伪随机数理论来生成均匀分布的高斯白噪声,并在VC++环境下实现这一过程。 首先,我们要理解“伪随机数”和“高斯白噪声”的概念。伪随机数并不是真正的随机数,而是一系列看起来随机但实际上...