2015-05-07 3 views
15

Я использовал библиотеку CryptoJS (то есть CryptoJS.algo.SHA3.creat()) для хэш SHA-3 на переднем конце. (см. http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha3.js)Расчет SHA 3 Hash в Java

Мне было интересно, есть ли эквивалентность библиотеки Java? Но пока я их не нашел. Не так много примеров Java SHA-3.

sun.security.Provider имеет SHA-3, но он не виден под Eclipse. Кроме того, я не уверен, является ли SHA-3 этого Солнца таким же, как SHA-3 CryptoJS.

Может ли кто-нибудь указать несколько примеров?

+1

FWIW, вы можете, на самом деле, ВС доступа * классов в Eclipse.. Для проекта, в котором вам нужно ссылаться на классы, укажите проект Java Build Path -> Libraries и убедитесь, что ссылка на «Системную библиотеку JRE» является автономной, установленной JRE (не JRE в установочном JDK) и упоминается как «Alternate JRE». [Не то, чтобы я рекомендовал это делать ...] – jdv

+1

@jdv Классы 'sun. *' Скрыты по причине. Вы не должны использовать их, иначе вы рискуете, что ваша программа будет разбита на будущую версию Java. См. [Почему разработчики не должны писать программы Это Call 'sun' Packages] (http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html) – Jesper

+1

@ Jesper, я знаю об этом , поэтому в моих комментариях и ответах есть очевидные оговорки вокруг них. – jdv

ответ

14

Общая ссылочная реализация Java для криптографической и криптоподдержки, вероятно, BouncyCastle. Это может быть большая библиотека, чтобы принести, поэтому мы часто достигают в sun.security (правильно или неправильно.)

Во всяком случае, BouncyCastle, кажется, предлагает org.bouncycastle.jcajce.provider.digest.SHA3.DigestSHA3

8

Благодаря @jdv за его ответ. Я добавляю больше информации, чтобы быстро начать и пример.

Во-первых, добавьте Maven зависимость BouncyCastle, или получить его на Maven Central:

<dependency> 
     <groupId>org.bouncycastle</groupId> 
     <artifactId>bcpkix-jdk15on</artifactId> 
     <version>1.56</version> 
    </dependency> 

Тогда мы можем проверить:

import org.bouncycastle.jcajce.provider.digest.SHA3; 
import org.bouncycastle.util.encoders.Hex; 
import org.junit.Test; 

@Test 
public void testSha3() throws Exception { 
    String input = "Hello world !"; 
    SHA3.DigestSHA3 digestSHA3 = new SHA3.Digest512(); 
    byte[] digest = digestSHA3.digest(input.getBytes()); 

    System.out.println("SHA3-512 = " + Hex.toHexString(digest)); 
} 

Вы получите этот результат (512 бит или 64 байта в шестнадцатеричной):

SHA3-512 = e9a4fd120d684537d57f314d51213ce5acef8ff6974e2b7599674ef0f0a3cf111f0d26ed602db946739da44 8210fb76a7621d7a8f07728372b10a975f36d8e37

Вы можете сравнить его с этим результатом: https://duckduckgo.com/?q=sha3+%22Hello+world+!%22