【问题标题】:How to generate a key with seed?如何使用种子生成密钥?
【发布时间】:2015-07-22 23:24:19
【问题描述】:

我需要使用 seed(字节数组)为我的算法生成一个 key。这段代码不起作用,因为它在不同的平台上给出了 2 个不同的结果:

byte seed [] = {50,30,...};
byte result [] = new byte [20];
SecureRandom rand = new SecureRandom();
rand.setSeed(seed);
rand.nextBytes(result);

我需要在不同的平台上得到相同的结果。

【问题讨论】:

  • eclipse 和安卓工作室
  • 平台都不是...
  • 好的,你是说你可以从eclipse运行两次并得到相同的结果?还是两次从工作室获得相同的结果?
  • 如果我从 eclipse 运行两次它会给出相同的结果,如果我从 studio 运行它会给出相同的结果,但是 eclipse 和 studio 的结果不相等
  • 你的目标是不同版本的android吗?

标签: java random key


【解决方案1】:

始终指定您希望使用的确切 PRNG 和提供程序。如果您只使用默认 PRNG,您可能最终会在应用程序的不同安装中使用不同的 PRNG,这些 PRNG 可能需要以不同方式调用才能正常工作。使用以下代码获取 PRNG 实例是合适的:

SecureRandom sr = SecureRandom.getInstance("SHA1PRNG", "SUN");

https://www.cigital.com/justice-league-blog/2009/08/14/proper-use-of-javas-securerandom/

另见:Android 4.2 broke my encrypt/decrypt code and the provided solutions don't work

这表明这可能适用于 android:

SecureRandom secrand = SecureRandom.getInstance("SHA1PRNG", "Crypto");

【讨论】:

    【解决方案2】:

    使用 SHA1PRNG 算法而不是 NativePRNG。

    SecureRandom rand = SecureRandom.getInstance("SHA1PRNG");
    rand.setSeed(seed);
    rand.nextBytes(result);
    

    【讨论】:

    • 我试过了,但它也给出了不同的结果:(
    • hmm 根据这​​个:moi.vonos.net/java/securerandom SHA1PRNG 应该是平台无关的
    • 为什么不使用散列算法而不是随机算法来生成密钥?这样一来,您将使用相同的种子获得相同的结果,并且不可逆。
    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多