【问题标题】:SecureRandom custom algorithmSecureRandom 自定义算法
【发布时间】:2016-07-12 14:01:42
【问题描述】:

出于测试目的,我需要将SecureRandom 与自定义算法一起使用。怎么可能?

我想我必须继承 SecureRandom 并提供 SecureRandomSpi 自定义实现:

 167:   /**
 168:      A constructor for SecureRandom. It constructs a new 
 169:      SecureRandom using the specified SecureRandomSpi from
 170:      the specified security provier. 
 171: 
 172:      @param secureRandomSpi A SecureRandomSpi class
 173:      @param provider A Provider class
 174:    */
 175:   protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
 176:   {
 177:     this(secureRandomSpi, provider, "unknown");
 178:   }

有没有简单的方法或者任何人都可以提供广告示例?

【问题讨论】:

    标签: java random secure-random


    【解决方案1】:

    构造函数

    protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider) 
    

    受保护,您不应该使用它。改为使用

    public static SecureRandom getInstance(String algorithm)
    

    如果你已经定义了自己的算法,你必须创建一个提供者并注册它,这样当你指定算法的名称时,jre 可以找到它。但你可能想使用一个现有的。

    但是,如果您创建了自己的加密算法,只需使用它而不是封装到 SecureRandom API 中。如果它足够好,确定某些提供商会付钱给你,将它添加到它的 API 中;D

    【讨论】:

    • 你能写一个简单的例子吗?
    • 关于使用现有算法?例如 SecureRandom sr = SecureRandom.getInstance("SHA1PRNG"); sr.nextInt() 将从 2^32 个不同的值中返回一个随机整数。更多信息在这里:stackoverflow.com/questions/27622625/…。关于注册自己的 Provider 恐怕没有一个简单的例子。但请看这里:stackoverflow.com/questions/10060261/…
    • 关于提供自定义算法。一个简单的返回 ++seed
    • “返回 ++seed”是什么意思?您可以使用 SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");字节[] 种子 = sr.generateSeed(5);获得使用 SHA1PRNG 种子生成算法计算的 5 字节种子。你需要这样的东西吗?
    • 然后你必须创建一个安全提供者,签名并注册它。正如我所说,这是一个复杂的过程,没有简单的例子。您必须遵循 Oracle Docs 中的说明。关键是,为什么要使用 SecureRandom API?这是一个旨在使用众所周知的密码实现的 API。出于测试目的,它会更简单地调用您自己的类。类似 MyCustomAlg.getRandomValue(seed);
    猜你喜欢
    • 2012-03-27
    • 2013-10-19
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多