加密算法与随机数生成算法

使用安全可靠的加密算法和随机数生成算法

密钥管理

在密码学里有个基本原则:密码系统的安全性应该依赖于密钥的复杂性,而不是算法的保密性。

在安全领域里,选择一个足够安全的加密算法不是困难的事,难的是密钥管理。在密钥管理中常见的错误是,将密钥硬编码在代码里。硬编码的密钥容易泄露:

① 代码被广泛传播(开源软件,商业软件的二进制文件,逆向工程反编译)。安全方案:通过 Diffie-Hellman 交换密钥体系,生成公私密钥来完成密钥的分发。

② 软件开发团队的成员都能看到代码,从而获知密钥,如果人员流动性较大,则密钥的保密性无法保证。安全方案:改善密钥管理,限制代码读写权限等。

Web 应用中常见做法:将密钥(包括密码)保存在配置文件或数据库中,在使用时由程序读取并加载至内存。密钥所在的配置文件或数据库需要严格的控制访问权限,同时也要确保运维或 DBA 中具有访问权限的人员越少越好。在应用发布到生产环境时需要重新生成新的密钥或密码,以免与测试环境中使用的密钥相同。

密钥管理的主要目的是为了防止密钥从非正常渠道泄露。定期更换密钥是一种有效的做法。一个比较安全的密钥管理系统,可以将所有的密钥(包括敏感的配置文件)都集中保存在一个服务器或集群上,并通过 Web Service 的方式提供获取密钥的 API。每个 Web 应用在需要使用密钥时,通过带认证信息的 API 请求密钥管理系统,动态获取密钥。Web 应用不能呢把密钥写入本地文件中,只加载到内存。密钥集中管理降低了系统对密钥的耦合性,也有利于定期更换密钥。

使用可靠的伪随机数算法

伪随机数是通过一些数学算法生成的随机数,并非真正的随机数。密码学上的安全伪随机数是不可压缩的。对应的真随机数通常由物理系统产生,比如电压的波动、空中电磁波的噪声等。

安全的随机数生成算法:在 Java 中,可以使用 java.security.SecureRandom;在 Linux 中,可以使用 /dev/random 或者 /dev/urandom;在 PHP5.3.0 及之后的版本中,若支持 OpenSSL 扩展,也可以直接使用函数来生成( string openssl_random_pseudo_bytes(int $length [, bool &$scrypto_strong]) )

此外,从算法上可以通过多个随机数的组合来增加随机数的复杂性。比如给随机数使用 MD5 算法后再连接一个随机字符,然后再使用 MD5算法。

时间: 2025-01-12 10:05:04

加密算法与随机数生成算法的相关文章

随机数生成算法【详解,归纳】

1.蒙特卡洛方法 蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解.为象征性地表明这一方法的概率统计特征,数学家冯·诺依曼用闻名世界的赌城——蒙特卡罗命名(就是那个冯·诺依曼). 蒙特卡罗方法解题过程的主要步骤: a.针对实际问题建立一个简单且便于实现的概率统计模型,使所求的量恰好是该模型的概率

随机数生成算法

1.蒙特卡洛方法 蒙特卡罗方法又称统计模拟法.随机抽样技术,是一种随机模拟方法,以概率和统计理论方法为基础的一种计算方法,是使用随机数(或更常见的伪随机数)来解决很多计算问题的方法.将所求解的问题同一定的概率模型相联系,用电子计算机实现统计模拟或抽样,以获得问题的近似解.为象征性地表明这一方法的概率统计特征,数学家冯·诺依曼用闻名世界的赌城--蒙特卡罗命名(就是那个冯·诺依曼). 蒙特卡罗方法解题过程的主要步骤: a.针对实际问题建立一个简单且便于实现的概率统计模型,使所求的量恰好是该模型的概率

腾讯webqq最新password加密算法,hash算法

常常在做webqq机器人,可是最头痛的问题就是腾讯常常加一些验证串来防止robot,如今共享出最新的腾讯password加密算法和hash 算法 hash算法 def webqq_hash(i, a): if isinstance(i, (str, unicode)): i = int(i) class b: def __init__(self, _b, i): self.s = _b or 0 self.e = i or 0 r = [i >> 24 & 255, i >>

正态分布的随机数生成算法

一.正态分布的随机数生成算法 前面介绍的都是均匀分布的随机数生成算法,在科学及工程应用中,正态分布的随机数也是经常用到的.对于一个给定的正态分布,描述该正态分布的参数包括均值μ和方差,在数学上,一种近似的产生正态分布的算法如下: Ri为[0,1]之间的均匀分布的随机数.当n趋向于无穷大时,得到的随机分布为正态分布.关于这个算法更为详细的数学讨论,读者可以参阅概率统计相关的书籍,这里将直接引用. 在实际应用中,不可能取n为无穷大.一般来说,n足够大就可以了.为了计算的方便,可以取n=12,这样上式

随机数生成算法(伪随机数)

什么是伪随机数,它和随机数的区别 伪随机就是一个过程看似随机的,但实际还不是随机的.伪随机数都是有一定的周期性的,如使用24小时里面的一个小时,这个就是伪随机数,或者三角函数的一个角度的三角函数值,因为时有周期性所以是伪随机的. 记住一点事要做到真正的随机有:抛硬币,热噪讯号.量子力学的效应.放射性元素的衰退辐射,或使用无法预测的现象等. 计算机里面的随机数主要还是用伪随机数来实现的,例如以当前时间作为种子. 伪随机数实现的算法 线性同余方法 平方取中法 M-sequence 梅森旋转算法 线性

腾讯webqq最新密码加密算法,hash算法

经常在做webqq机器人,但是最头痛的问题就是腾讯经常加一些验证串来防止robot,现在共享出最新的腾讯密码加密算法和hash 算法 hash算法 def webqq_hash(i, a): if isinstance(i, (str, unicode)): i = int(i) class b: def __init__(self, _b, i): self.s = _b or 0 self.e = i or 0 r = [i >> 24 & 255, i >> 16 &

加密算法之 MD5算法

题记:本人自测了很多次,该算法和apache的commons utils包中的MD5算法计算一致 一.针对文件内容生成MD5值 应用场景:针对文件,在传输过程由于网络原因丢帧或者被人别恶意篡改内容,可以通过源文件的MD5和下载后的文件MD5值进行比较,如果一致说明文件内容相同,否则下载的文件有问题. 该MD5代码计算这个文件内容,生成一个MD5值. import java.io.File; import java.io.FileInputStream; import java.io.FileNo

LCG(linear congruential generator): 一种简单的随机数生成算法

目录 LCG算法 python 实现 LCG算法 LCG(linear congruential generator)线性同余算法,是一个古老的产生随机数的算法.由以下参数组成: 参数 m a c X 性质 模数 乘数 加数 随机数 作用 取模 移位 偏移 作为结果 LCG算法是如下的一个递推公式,每下一个随机数是当前随机数向左移动 log2 a 位,加上一个 c,最后对 m 取余,使随机数限制在 0 ~ m-1 内 从该式可以看出,该算法由于构成简单,具有以下优点: 计算速度快 易于实现 易于

史上最全的java随机数生成算法[转载]

1 package com.zuidaima.core.util; 2 3 import java.util.Random; 4 5 public class RandomUtil { 6 public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 7 public static final String LETTERCHAR = "