2016-08-02 13 views
1

入力テキストに基づいてハッシュを生成するには、に基づいています。ファイルパスを使用したコマンドプロンプトのファイルハッシュジェネレータ

package main; 
import java.util.Scanner; 
import java.math.BigInteger; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class String_Hash_Generator { 
    public static void main(String args[]) throws NoSuchAlgorithmException { 
     Scanner inputScanner = new Scanner(System.in); 
     System.out.print("Input: "); 
     String input = inputScanner.next(); 

     /* MD2 */ 
     MessageDigest objMD2 = MessageDigest.getInstance("MD2"); 
     byte[] bytMD2 = objMD2.digest(input.getBytes()); 
     BigInteger intNumMD2 = new BigInteger(1, bytMD2); 
     String hcMD2 = intNumMD2.toString(16); 
     while (hcMD2.length() < 32) { 
      hcMD2 = "0" + hcMD2; 
     } 

     /* MD5 */ 
     MessageDigest objMD5 = MessageDigest.getInstance("MD5"); 
     byte[] bytMD5 = objMD5.digest(input.getBytes()); 
     BigInteger intNumMD5 = new BigInteger(1, bytMD5); 
     String hcMD5 = intNumMD5.toString(16); 
     while (hcMD5.length() < 32) { 
      hcMD5 = "0" + hcMD5; 
     } 

     /* SHA-1 */ 
     MessageDigest objSHA1 = MessageDigest.getInstance("SHA-1"); 
     byte[] bytSHA1 = objSHA1.digest(input.getBytes()); 
     BigInteger intNumSHA1 = new BigInteger(1, bytSHA1); 
     String hcSHA1 = intNumSHA1.toString(16); 
     while (hcSHA1.length() < 40) { 
      hcSHA1 = "0" + hcSHA1; 
     } 


     /* SHA-256 */ 
     MessageDigest objSHA256 = MessageDigest.getInstance("SHA-256"); 
     byte[] bytSHA256 = objSHA256.digest(input.getBytes()); 
     BigInteger intNumSHA256 = new BigInteger(1, bytSHA256); 
     String hcSHA256 = intNumSHA256.toString(16); 
     while (hcSHA256.length() < 64) { 
      hcSHA256 = "0" + hcSHA256; 
     } 

     /* SHA-384 */ 

     MessageDigest objSHA384 = MessageDigest.getInstance("SHA-384"); 
     byte[] bytSHA384 = objSHA384.digest(input.getBytes()); 
     BigInteger intNumSHA384 = new BigInteger(1, bytSHA384); 
     String hcSHA384 = intNumSHA384.toString(16); 
     while (hcSHA384.length() < 96) { 
      hcSHA384 = "0" + hcSHA384; 
     } 

     /* SHA-512 */ 
     MessageDigest objSHA512 = MessageDigest.getInstance("SHA-512"); 
     byte[] bytSHA512 = objSHA512.digest(input.getBytes()); 
     BigInteger intNumSHA512 = new BigInteger(1, bytSHA512); 
     String hcSHA512 = intNumSHA512.toString(16); 
     while (hcSHA512.length() < 128) { 
      hcSHA512 = "0" + hcSHA512; 
     } 

     System.out.println("\nMD2: " + hcMD2 
         + "\nMD5: " + hcMD5 
         + "\nSHA-1: " + hcSHA1 
         + "\nSHA-256: " + hcSHA256 
         + "\nSHA-384: " + hcSHA384 
         + "\nSHA-512: " + hcSHA512); 
    } 
} 

入力は、コマンドプロンプトで実行する必要があるため、スキャナが必要です。

方法ファイルハッシュ生成器はC:\Program Files\WinRAR\Rar.exeとして、そのようなファイルパスを取得し、ハッシュ(MD2、MD5、SHA-1、SHA-256、SHA-384、SHA-512)を生成作成することができますか?

編集:見つけられた唯一の解決策は、パス全体ではなくファイルの名前のみを使用することです。

答えて

0

まず、byte[]を16進数で印刷するメカニズムが必要です。あなたが行うことができますHow to convert a byte array to a hex string in Java?にトップの答えから、その後

final protected static char[] hexArray = "ABCDEF".toCharArray(); 
public static String bytesToHex(byte[] bytes) { 
    char[] hexChars = new char[bytes.length * 2]; 
    for (int j = 0; j < bytes.length; j++) { 
     int v = bytes[j] & 0xFF; 
     hexChars[j * 2] = hexArray[v >>> 4]; 
     hexChars[j * 2 + 1] = hexArray[v & 0x0F]; 
    } 
    return new String(hexChars); 
} 

、あなたのファイルを読むためにFiles.readAllBytes(Path)を使用する場合があります。最後に、各ハッシュを計算するハッシュアルゴリズムの配列を繰り返します。何かのように、

public static void main(String args[]) { 
    Scanner inputScanner = new Scanner(System.in); 
    String[] hashAlgos = { "MD2", "MD5", "SHA-1", "SHA-256", "SHA-384", "SHA-512" }; 
    System.out.print("Input: "); 
    String input = inputScanner.next(); 
    try { 
     byte[] fileContents = Files.readAllBytes(new File(input).toPath()); 
     for (String algo : hashAlgos) { 
      MessageDigest md = MessageDigest.getInstance(algo); 
      byte[] hash = md.digest(fileContents); 
      System.out.printf("%s %s%n", algo, bytesToHex(hash)); 
     } 
    } catch (NoSuchAlgorithmException | IOException e) { 
     e.printStackTrace(); 
    } 
} 
+0

ありがとう、これは完全に動作します。私はしかし、質問があります。私の** text **ハッシュジェネレータでは、 '098f6bcd4621d373cade4e832627b4f6'のような小文字のハッシュが生成されます。他のジェネレータは' 098F6BCD4621D373CADE4E832627B4F6'のように大文字のハッシュを返します。違いがありますか、どちらを使用すべきですか(またはより頻繁に使用されますか)。 –

+0

ベース16では、同等です。好きなものを使いましょう。しかし、投稿されると、あなたは大文字を得ているはずです。 –

+0

ええ、ファイルのハッシュジェネレータで大文字を取得しています。ありがとう。 –

関連する問題