cmcc auto怎么用-auto在哪里查看已经产生费

如何在各种编程语言中生成安全的随机数? -
| 关注黑客与极客
如何在各种编程语言中生成安全的随机数?
共218814人围观
,发现 12 个不明物体
生成安全的随机数据指什么?为什么要生成安全的随机数据?之前一些文献中这并没有很好得说明如何生成“安全”的随机数。所以,这里将介绍如何在下面的编程语言中安全地生成随机数。
&&& C/C++&&& Java&&& .NET&&& Node.js&&& PHP&&& Python&&& Ruby
需要包含的一般条件
这篇文章的所有方案都必须只从内核的CSPRNG(Cryptographically Secure Pseudo-Random Number Generator,密码安全的伪随机数生成器)中读取,并且失败后立即关闭。用户空间的RNG以及回退到不安全的RNG都是不允许的。所以,根据平台的不同,使用下面的熵源:
&&& Windows:
&&&&&&& RtlGenRandom
&&& Linux:
&&&&&&& getrandom (如何可用的话)
&&&&&&&&&&& 它的方法是正确的,在播种之前会阻塞,之后不再播种。
&&&&&&& /dev/urandom (老的Linux内核)
&&&&&&&&&&& 对于在Linux启动时运行的软件,查询/dev/random,直到它可用。这意味着那时/dev/urandom已经播种了,你可以安全地从/dev/urandom中读取内容了,可以用到你的密码中。不要从/dev/random中读取。
&&& OpenBSD:
&&&&&&& getentropy()
&&&&&&& arc4random_buf() 使用ChaCha20加密算法 (不是RC4)
&&& 其它类Unix系统 (包括OS X):
&&&&&&& /dev/urandom
这里不考虑依赖于haveged,egd等程序的解决方案。
C/C++中的密码安全随机
最简单和安全的方法是,把libsodium库添加到工程的依赖库中,使用randombytes_buf()函数。
在查看libsodium是怎样实现这些函数的。PHP团队在其内部的random_bytes函数实现中采用了与此类似的方法。
#include "sodium.h"int foo() {&&& char myString[32];&&& int myI&& &&&& randombytes_buf(myString, 32);&&& /* myString will be a string of 32 random bytes */&&& myInt = randombytes_uniform(10);&&& /* myInt will be a random number between 0 and 9 */}
如果可以的话就使用libsodium,下面的其它语言也是如此。
Java中的密码安全随机
除了使用libsodium(推荐),也可以直接使用Java的SecureRandom类:
SecureRandom csprng = new SecureRandom();byte[] randomBytes = new byte[32];csprng.nextBytes(randombytes);
注意:不要在Linux上使用SecureRandom.getInstanceStrong(),不要被名称误导,它等同于读取/dev/random,这个是不安全的。Java8中new SecureRandom()默认读取/dev/urandom,这才是你需要的。
.NET(C#)中的密码安全随机
普遍采用的方案是使用System.Security.Cryptography.RNGCryptoServiceProvider,比如:
RandomNumberGenerator csprng = new RNGCryptoServiceProvider();byte[] rawByteArray = new byte[32];csprng.getBytes(rawByteArray);
如果你需要生成密码上安全的整数,查看Inferno(一个Stan Drapkin写的.NET密码库)中的CryptoRandom类的实现方法。
Node.js中的密码安全随机
不要使用crypto.randomBytes()
&在openssl抹掉crypto.randomBytes之前,你最好的选择是使用node-sodium(来替代这个函数)&
var csprng = require("sodium").Rvar bytes = csprng.randombytes_buf(32);
PHP中的密码安全随机
如果你运行的是PHP 7,有一个内置的函数:
$string = random_bytes(32);$integer = random_int(0, PHP_INT_MAX);
如何你用的还是PHP 5, 获取random_compat,然后同PHP 7一样使用相同的API。
composer require paragonie/random_compat:^2
请使用版本2。版本1会回退到OpenSSL,如果没有其它可用的熵源,它会导致安全问题。然而,一些人为了兼容性,会明确地使用版本1。
如果你在写一个供别人在他们的工程中使用的PHP 5库,将你的composer.json条件字符串设置为^1|^2。相反,如果你在写一个应用程序,将条件字符串设置为^2。
Python中的密码安全随机
如果你没有使用libsodium:
如果你需要随机字节,使用os.urandom().
如果你需要其它格式的随机数据,你需要使用random.SystemRandom(),而不是random。
import sysimport random# Random bytesbytes = os.urandom(32)csprng = random.SystemRandom()# Random (probably large) integerint = csprng.randint(0, sys.maxint)
Ruby中的密码安全随机
不要使用Ruby的SecureRandom!
与名称无关,它不是最好的CSPRNG。幸运的是,Tony Arcieri(密码专家, 的设计者,全面的密码应用工程师)给Ruby community提供了一个安全的选择,将libsodium的sysrandom接口移植到了Ruby gem中。
建议:使用Sysrandom代理SecureRandom。
安装sysrandom:
gem install sysrandom
Sysrandom与SecureRandom API兼容。可以通过打补丁来代替SecureRandom。
*本文译者:felix,翻译自:,转载须注明来自FreeBuf黑客与极客()
PHP是世界上最好的语言!Python是国内最好的语言! :mrgreen:
若可以联网的话取random.org的api可以么
PHP是世界上最好的语言!
/dev/random
你需要一台量子密钥生成器[噢耶]
必须您当前尚未登录。
必须(保密)
这家伙太懒,还未填写个人描述!
关注我们 分享每日精选文章以下试题来自:
问答题本题程序的功能是随机产生一个1~10的随机数,根据提示,用户可以猜这个随机数。例如程序随机产生的随机数是7,如果输入8,则提示“Try smaller…”并继续提示输入;如果输出6,则提示“Try bigger…”并继续提示输入;如果输入7,则会输出“Great!”并退出程序。请将下述程序补充完整(注意:不得改动程序的结构,不得增行或删行)。
import java.io.*;
public class basic
public static void main(String[] args)
InputStreamR
Bur feredR
Ir = new InputStreamReader(System.in)
In = new BufferedReader(ir);
int ranNum = ______;
int guessNum = -1;
while (______)
System.out.print ("Please Input:");
guessNum = Integer.parseInt(str);
catch (Exception e)
if(guessNum > ranNum)
System.out.println("Try smaller...");
System.out.println("Try bigger...");
System.out.println ("Great ! ");
(int)(Math.random()*10)。
guessNum!=ranNum。
str=in.readLine()。
为您推荐的考试题库
你可能感兴趣的试题
1.问答题 Container contentPane = getContentPane()。
area.subtract(area2)。
area.exclusiveOr(a rea2)。 2.问答题 checkPassword.setEditable(false)。
private JPasswordField myPassword。
热门相关试卷
最新相关试卷扫二维码下载作业帮
1.75亿学生的选择
下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
如何用C语言产生一个六位数的随机数?请问如何用C语言编一个程序算出随机的一个六位数随机数啊?
久违椮gU70
扫二维码下载作业帮
1.75亿学生的选择
#include#include#includemain(){srand(time(0));int a=rand()%000;printf("随机数%d",a);}
为您推荐:
其他类似问题
扫描下载二维码 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
利用SPSS产生随机数字的常用方法
下载积分:480
内容提示:利用SPSS产生随机数字的常用方法
文档格式:PDF|
浏览次数:62|
上传日期: 00:09:58|
文档星级:
该用户还上传了这些文档
利用SPSS产生随机数字的常用方法
官方公共微信

我要回帖

更多关于 cmcc web是免费的吗 的文章

 

随机推荐