2017-07-25 68 views
0

http://www.sha1-online.com/http://passwordsgenerator.net/sha1-hash-generator/http://www.miraclesalad.com/webtools/sha1.php如何在大多數網站和程序中像在android中生成SHA1一樣?

-all對SHA-1的123

返回​​然而,我的代碼:

public static String SHA1(String clearString) 
{ 
    try 
    { 
     MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); 
     messageDigest.update(clearString.getBytes("UTF-8")); 
     byte[] bytes = messageDigest.digest(); 
     StringBuilder buffer = new StringBuilder(); 
     for (byte b : bytes) 
     { 
      buffer.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1)); 
     } 
     return buffer.toString(); 
    } 
    catch (Exception ignored) 
    { 
     ignored.printStackTrace(); 
     return null; 
    } 
} 

我嘗試了很多其他的代碼,我得到有些不同。用上面的代碼,我得到:9c9598069a40434b500d862e1a13ab9d5a969fc8123

看到所有網站使用相同的算法,似乎我做錯了什麼。

+1

嘗試[這種方法用於產生輸出(https://stackoverflow.com/a/2197650/115145)。 – CommonsWare

+0

[Java的MessageDigest SHA1算法返回的結果可能與PHP的SHA1函數不同](https://stackoverflow.com/questions/7605217/javas-messagedigest-sha1-algorithm-returns-different-result-than-sha1功能) – maszter

+0

@CommonsWare但如果我想要一個字符串作爲參數呢? –

回答

2

看起來問題在於您轉換爲String的方式。

public static String byteArrayToString(byte[] bytes) { 
    StringBuilder buffer = new StringBuilder(); 
    for (byte b : bytes) { 
     buffer.append(String.format(Locale.getDefault(), "%02x", b)); 
    } 
    return buffer.toString(); 
} 

public static String SHA1(String clearString) 
{ 
    try { 
     MessageDigest messageDigest = MessageDigest.getInstance("SHA-1"); 
     messageDigest.update(clearString.getBytes("UTF-8")); 
     return byteArrayToString(messageDigest.digest()); 
    } catch (Exception ignored) { 
     ignored.printStackTrace(); 
     return null; 
    } 
} 

所以SHA1("123")將導致:40bd001563085fc35165329ea1ff5c5ecbdbbeef

相關問題