Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
FIPS 140-2兼容随机数生成器-Java_Java_Security_Cryptography_Fips - Fatal编程技术网

FIPS 140-2兼容随机数生成器-Java

FIPS 140-2兼容随机数生成器-Java,java,security,cryptography,fips,Java,Security,Cryptography,Fips,我需要编写一个随机数生成器,它使用符合FIPS 140-2标准/经过认证的算法。我很难找到适合我的东西。以前有人这样做过吗?我不想为此付出任何代价 使用Java8。开发环境为Mac OSX,服务器为CentOs 7 更新: 到目前为止,代码看起来是这样的 import java.security.SecureRandom; import java.util.Arrays; import java.util.Collections; import java.util.List; import ja

我需要编写一个随机数生成器,它使用符合FIPS 140-2标准/经过认证的算法。我很难找到适合我的东西。以前有人这样做过吗?我不想为此付出任何代价

使用Java8。开发环境为Mac OSX,服务器为CentOs 7

更新:

到目前为止,代码看起来是这样的

import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.LongStream;

public class LongRandom {
public LongRandom(){}
private Long minLong = new Long("1000000000000000000");

public List<Long> getRandomLongList(int numberOfRandom){
final SecureRandom random = new SecureRandom();
LongStream longs = random.longs(numberOfRandom, minLong, Long.MAX_VALUE).distinct();
long[] arrayLong = longs.toArray();
List<Long> list = Arrays.stream(arrayLong).boxed().collect(Collectors.toList());

return list;
}

public Long getRandomLongWinner(List<Long> potentialWinners){
final SecureRandom random = new SecureRandom();
Collections.shuffle(potentialWinners,random);
IntStream ints = random.ints(1,0,(potentialWinners.size() - 1));

return potentialWinners.get(ints.findFirst().getAsInt());
}
导入java.security.SecureRandom;
导入java.util.array;
导入java.util.Collections;
导入java.util.List;
导入java.util.stream.collector;
导入java.util.stream.IntStream;
导入java.util.stream.LongStream;
公共类长随机{
公共LongRandom(){}
私有Long minLong=新Long(“10000000000000000”);
公共列表getRandomLongList(int numberOfRandom){
最终SecureRandom=新SecureRandom();
LongStream longs=random.longs(numberOfRandom,minLong,Long.MAX_值).distinct();
long[]arrayLong=longs.toArray();
List List=Arrays.stream(arrayLong.boxed().collect(Collectors.toList());
退货清单;
}
公开长期随机长期赢家(列出潜在赢家){
最终SecureRandom=新SecureRandom();
收藏。洗牌(潜在赢家,随机);
IntStream ints=random.ints(1,0,(potentialWinners.size()-1));
返回潜在的Winners.get(ints.findFirst().getAsInt());
}

}以下是适当RNG的官方列表。BSAFE应用广泛


您在哪里被阻止?你目前写了什么?(请发布您的代码,以便我们提供准确的帮助)算法可以符合FIPS,实现可以通过FIPS认证(这意味着它通过了所有测试向量,是否启动测试等)。您是否阅读了
SecureRandom
的Javadoc?到目前为止,我有类似的内容。。。我只是不确定它是否足够随机。我确实读过SecureRandom Javadocs,其中声明它至少符合FIPS 140-2。Java Docs说它至少符合FIPS 140-2,但我在NIST验证数据库中没有看到它,所以在我看来,如果您需要FIPS 140-2模块,这是不行的。也许它是经过验证的,NIST数据库太神秘了,可以说,对我来说无法正确解释?BSAFE被广泛用于随机数发生器,直到双EC DRBG崩溃。其他供应商也有相同的PRNG,但据我所知,只有BSAFE将其作为默认设置。