Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.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
Java 为什么BouncyCastle Keccak sha-384和MessageDigest sha-384的输出不同?_Java_Bouncycastle_Sha_Message Digest_Sha 3 - Fatal编程技术网

Java 为什么BouncyCastle Keccak sha-384和MessageDigest sha-384的输出不同?

Java 为什么BouncyCastle Keccak sha-384和MessageDigest sha-384的输出不同?,java,bouncycastle,sha,message-digest,sha-3,Java,Bouncycastle,Sha,Message Digest,Sha 3,对仅一个字节的数组进行散列的简单示例: import java.security.MessageDigest; import java.util.Arrays; import org.bouncycastle.jcajce.provider.digest.Keccak; public class Program { public static void main(String[ ] args) { // MessageDigest: byte[] sta

对仅一个字节的数组进行散列的简单示例:

import java.security.MessageDigest;
import java.util.Arrays;
import org.bouncycastle.jcajce.provider.digest.Keccak;

public class Program {
    public static void main(String[ ] args) {
        // MessageDigest:
        byte[] state = { (byte) 1};
        try {
            MessageDigest md5 = MessageDigest.getInstance("SHA-384");
            byte[] digest = md5.digest(state);
            System.out.println("A: " + Arrays.toString(digest));
        } catch (Exception e) {}

        // BouncyCastle Keccak:
        Keccak.Digest384 keccak = new Keccak.Digest384();
        keccak.update(state);
        try {
            byte[] digest = new byte[48];
            keccak.digest(digest, 0, 48);
            System.out.println("B: " + Arrays.toString(digest));
        } catch (Exception e) {}
    }
}
该程序的输出如下:

答:[115,44,-24,125,-122,-11,95,-49,-85,119,10,4,123,9,13,-94,50,112,-6,32,104,50,-33,-22,126,12,-108,111,-1,69,31,-127,-102,-35,36,35,116,-66,85,27,13,99,24,-19,108,125,65,-40]

[45、-11、56、-101、-127、15、27、78、83、13、3、-41、58、-24、82、-74、37、-120、-70、20、26、16、66、76、2104、-22、-24、-58、79、-81、58、-71、1、-14、-115、-27、85、73、-70、-8113、-67、-93、-19、62、-15、65]

它们不应该是一样的吗?还是我遗漏了什么

使用的BouncyCastle版本:


Java:jdk1.8.0_121

我相信您现有的代码正在使用Bouncy Castle创建Keccak哈希函数。Keccak是SHA-3摘要函数的超集,SHA-3要求在Keccak函数上配置特定设置,因此使用不同的Keccak配置将给SHA-3带来不同的结果

要拨打Bouncy Castle,请尝试以下方法:

import org.bouncycastle.jcajce.provider.digest.SHA3.DigestSHA3;
import org.bouncycastle.jcajce.provider.digest.SHA3.Digest384;

public class Program {
    public static void main(String[ ] args) {
        /* EARLIER CODE OMITTED */

        SHA3.DigestSHA3 sha3 = new SHA3.DigestSHA3(384);
        sha3.update(state);
        System.out.println("B: " + Arrays.toString(md.digest()));
    }
}

我目前没有安装Bouncy Castle,但我相信这将导致Bouncy Castle使用SHA-3384哈希函数。

我相信您现有的代码正在使用Bouncy Castle创建Keccak哈希函数。Keccak是SHA-3摘要函数的超集,SHA-3要求在Keccak函数上配置特定设置,因此使用不同的Keccak配置将给SHA-3带来不同的结果

要拨打Bouncy Castle,请尝试以下方法:

import org.bouncycastle.jcajce.provider.digest.SHA3.DigestSHA3;
import org.bouncycastle.jcajce.provider.digest.SHA3.Digest384;

public class Program {
    public static void main(String[ ] args) {
        /* EARLIER CODE OMITTED */

        SHA3.DigestSHA3 sha3 = new SHA3.DigestSHA3(384);
        sha3.update(state);
        System.out.println("B: " + Arrays.toString(md.digest()));
    }
}

我目前没有安装Bouncy Castle,但我相信这将导致Bouncy Castle使用SHA-3384哈希函数。

SHA-384是SHA2系列的哈希函数,具有384位输出。你想要SHA3-384。下面是一些使用您的示例和示例的示例代码

输出为:

A: [-115, 44, -24, 125, -122, -11, 95, -49, -85, 119, 10, 4, 123, 9, 13, -94, 50, 112, -6, 32, 104, 50, -33, -22, 126, 12, -108, 111, -1, 69, 31, -127, -102, -35, 36, 35, 116, -66, 85, 27, 13, 99, 24, -19, 108, 125, 65, -40]
B: [49, 123, -48, 9, 32, 59, -57, -101, 6, 78, 83, -8, -20, -53, 99, 46, 5, 19, -121, 44, -98, -59, -64, -90, -108, -106, -82, -8, -106, 113, -81, 33, -19, -110, -93, -78, 85, 72, 12, 90, 9, 118, -22, 73, 37, -118, -64, -114]
C: [49, 123, -48, 9, 32, 59, -57, -101, 6, 78, 83, -8, -20, -53, 99, 46, 5, 19, -121, 44, -98, -59, -64, -90, -108, -106, -82, -8, -106, 113, -81, 33, -19, -110, -93, -78, 85, 72, 12, 90, 9, 118, -22, 73, 37, -118, -64, -114]

SHA-384是一个hash函数家族的384位输出。你想要SHA3-384。下面是一些使用您的示例和示例的示例代码

输出为:

A: [-115, 44, -24, 125, -122, -11, 95, -49, -85, 119, 10, 4, 123, 9, 13, -94, 50, 112, -6, 32, 104, 50, -33, -22, 126, 12, -108, 111, -1, 69, 31, -127, -102, -35, 36, 35, 116, -66, 85, 27, 13, 99, 24, -19, 108, 125, 65, -40]
B: [49, 123, -48, 9, 32, 59, -57, -101, 6, 78, 83, -8, -20, -53, 99, 46, 5, 19, -121, 44, -98, -59, -64, -90, -108, -106, -82, -8, -106, 113, -81, 33, -19, -110, -93, -78, 85, 72, 12, 90, 9, 118, -22, 73, 37, -118, -64, -114]
C: [49, 123, -48, 9, 32, 59, -57, -101, 6, 78, 83, -8, -20, -53, 99, 46, 5, 19, -121, 44, -98, -59, -64, -90, -108, -106, -82, -8, -106, 113, -81, 33, -19, -110, -93, -78, 85, 72, 12, 90, 9, 118, -22, 73, 37, -118, -64, -114]

Keccak是SHA-3函数的超集,因此当您调用MessageDigest.getInstanceSHA-384(建议使用SHA-3函数)时,对Keccak.Digest384的调用可能使用不同的函数参数,这将提供不同的输出。检查Bouncy Castle文档,确保您请求的是SHA-3函数,而不是其他Keccak函数。非常简单,SHA-384将为您提供SHA2家族中的该名称的哈希函数。显然,您需要SHA3-384。Keccak是SHA-3函数的超集,因此,尽管您调用MessageDigest.getInstanceSHA-384(建议使用SHA-3函数),但对Keccak.Digest384的调用可能使用不同的函数参数,这将提供不同的输出。检查Bouncy Castle文档,确保您请求的是SHA-3函数,而不是其他Keccak函数。非常简单,SHA-384将为您提供SHA2家族中的该名称的哈希函数。很明显,你想要SHA3-384.我猜你是指新的SHA3.DigestSHA3384.我猜你是指新的SHA3.DigestSHA3384