繁体   English   中英

使用byte []生成密钥会为MAC和Windows生成不同的结果

[英]Key generation using byte[] generates different results for MAC and Windows

我正在尝试使用byte []即从字符串生成密钥。 我的课程是最终的,我有静态的方法。

类:

public final class Operation {

    public static Key getKey(byte[] arr)
    {
        Key key = null;
    KeyGenerator keyGen;
        Security.addProvider(new BouncyCastleProvider());
    try
    {
            keyGen = KeyGenerator.getInstance("AES", "BC");
            if(arr == null)
                keyGen.init(192);
            else
                keyGen.init(new SecureRandom(arr));
            key = keyGen.generateKey();
    }
    catch (NoSuchAlgorithmException e)
    {
            System.err.println(e);  
    } catch (NoSuchProviderException e) {
            System.err.println(e);
        }

        return key;
    }

    public static String getKeyAsString(Key key)
    {
        return  new String(Base64.encode(key.getEncoded()));
    }

    public static Key getKeyFromString(String string)
    {
        return new SecretKeySpec(Base64.decode(string.getBytes()), "AES");
    }

}

主要功能有以下几行:

    Key key1 = Operation.getKey("admin".getBytes());
    Key key2 = Operation.getKey("admin".getBytes());

    System.out.println(new String(Base64.encode(key1.getEncoded())));
    System.out.println(new String(Base64.encode(key2.getEncoded())));

我在Windows上得到的键输出相同:

4BjJkLCJ3LyPluKkd2DBgqghhNfSgzKD
4BjJkLCJ3LyPluKkd2DBgqghhNfSgzKD

但是Mac OS并非如此。

我正在使用的依赖项是:

<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk16</artifactId>
<version>1.46</version>
</dependency>

现在我指出JDK版本是这里唯一的问题。

在Windows上,我有JDK 1.7而在MAC上有JDK 1.6 这真的是JDK的问题吗?我真的被困在这里了。

请帮忙。

我在Linux中看到不同的值。 我认为原因是SecureRandom ,请检查以下内容:

System.out.println(new SecureRandom("admin".getBytes()).nextLong());
System.out.println(new SecureRandom("admin".getBytes()).nextLong());

示例输出(每次更改):

1642139269925848082
2081201540941864354

从javadoc:

许多SecureRandom实现都采用伪随机数生成器(PRNG)的形式,这意味着它们使用确定性算法从真实的随机种子生成伪随机序列。 其他实现可能会产生真正的随机数,而其他实现可能会同时使用这两种技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM