2016-03-22 24 views
0

Bunu java'da yapmak için lütfen kodu öğrenmek ister misiniz?Java'da hash sha256 ile nasıl karma kodu oluşturabilirim?

Şimdiye kadar sahip olduğum şey bu değil, işe yaramıyor mu?

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import static jdk.nashorn.tools.ShellFunctions.input; 

public class Sha256hash 
{ 

    public static String main(String[] args) throws NoSuchAlgorithmException 
    { 
     MessageDigest md = MessageDigest.getInstance("SHA1"); 
      md.reset(); 
      byte[] buffer = input.getBytes("UTF-8"); 
      md.update(buffer); 
      byte[] digest = md.digest(); 

      String hexStr = ""; 
      for (int i = 0; i < digest.length; i++) { 
       hexStr += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1); 
      } 
      return hexStr; 
    } 

} 
+1

Neden olmasın? Sorun ne? – SLaks

+0

bana girişte bir hata veriyor. –

+1

numaralı sembolü bulamıyor. Çünkü, 'giriş' posta kodunuzda herhangi bir yerde bildirilmemiş. Ayrıca, SHA1' = = SHA256'. –

cevap

3

Hala SHA-1 veya SHA-256 isteyip anlamış değilim, bu yüzden soyut sorun edelim; öncelikle bir kodlamak yöntem byte[] alıp onaltılık dönmek için (merak etmeyin, zaten yazdım; ama StringBuilderString üzerinde birleştirme tercih ediyorum Java Stringdeğişmez, sen için çöp oluştururken böylece. + ile sonradan çöp toplama) -

private static String encodeHex(byte[] digest) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < digest.length; i++) { 
     sb.append(Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1)); 
    } 
    return sb.toString(); 
} 

sonra, sindirmek algoritması adı ve String alır ve bu özet döndüren bir yöntem oluşturabilir.

public static String digest(String alg, String input) { 
    try { 
     MessageDigest md = MessageDigest.getInstance(alg); 
     byte[] buffer = input.getBytes("UTF-8"); 
     md.update(buffer); 
     byte[] digest = md.digest(); 
     return encodeHex(digest); 
    } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) { 
     e.printStackTrace(); 
     return e.getMessage(); 
    } 
} 

gibi Sonra alabileceği bir SHA-1veya (beklendiği gibi) verir

public static void main(String[] args) { 
    System.out.println(digest("SHA1", "")); 
    System.out.println(digest("SHA-256", "")); 
} 

gibi SHA-256 karma

da39a3ee5e6b4b0d3255bfef95601890afd80709 
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 
1

Ana giriş noktası, String döndüremiyor. Ayrıca, input beyan edilmez. İşlevinizin adını, input parametresiyle olarak değiştirmek isteyebilirsiniz. Kullanmak isterseniz Elliott işaret ettiği gibi,

import java.io.UnsupportedEncodingException; 
import java.security.NoSuchAlgorithmException; 

public class Tester { 
    public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException { 
     String someText = "example"; 
     System.out.println(Sha256hash.generate(someText)); 
    } 
} 

Son olarak:

import java.io.UnsupportedEncodingException; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 

public class Sha256hash 
{ 

    public static String generate(String input) throws NoSuchAlgorithmException, UnsupportedEncodingException 
    { 
     MessageDigest md = MessageDigest.getInstance("SHA1"); 
      md.reset(); 
      byte[] buffer = input.getBytes("UTF-8"); 
      md.update(buffer); 
      byte[] digest = md.digest(); 

      String hexStr = ""; 
      for (int i = 0; i < digest.length; i++) { 
       hexStr += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1); 
      } 
      return hexStr; 
    } 

} 

Ana:

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import static jdk.nashorn.tools.ShellFunctions.input; 

public class Sha256hash 
{ 

    public static String generate(String input) throws NoSuchAlgorithmException 
    { 
     MessageDigest md = MessageDigest.getInstance("SHA1"); 
      md.reset(); 
      byte[] buffer = input.getBytes("UTF-8"); 
      md.update(buffer); 
      byte[] digest = md.digest(); 

      String hexStr = ""; 
      for (int i = 0; i < digest.length; i++) { 
       hexStr += Integer.toString((digest[i] & 0xff) + 0x100, 16).substring(1); 
      } 
      return hexStr; 
    } 

} 

Bu örnek beni dize example işleme sonucunda c3499c2729730a7f807efb8676a92dcb6f8a3f8f döndürmek için çalışır SHA-256 MessageDigest.getInstance("SHA1");'u MessageDigest.getInstance("SHA256") olarak değiştirmelisiniz; Şu an SHA-1 kullanıyorsunuz. Ayrıca Elliot tarafından işaret edilen, iyileştirilmiş verimlilik için döngüde StringBuilder kullanmalısınız.