2013-05-01 64 views
1

我想使用SHA1散列將密碼插入到我的數據庫中 我在phpmyadmin中通過選擇函數sha1手動執行此操作,但是如何使用Java執行此操作?在Java中使用SHA1存儲密碼

任何想法?謝謝!

+1

搜索是否顯示任何好的潛在客戶?有*許多*重複。 (另外,「加密」!=「哈希」,這將是一個更好的搜索術語。) – user2246674 2013-05-01 18:04:06

+0

開始*理解*本回復:http://stackoverflow.com/a/401684/2246674 – user2246674 2013-05-01 18:07:13

+0

SHA1是一個哈希函數抱歉 – Somar 2013-05-01 18:09:08

回答

1

如果必須use java

import java.io.ByteArrayInputStream; 
import java.security.MessageDigest; 

public class SHACheckSumExample 
{ 
    public static void main(String[] args)throws Exception 
    { 
     MessageDigest md = MessageDigest.getInstance("SHA-1"); 
     ByteArrayInputStream fis = new ByteArrayInputStream(args[1].getBytes()); 

     byte[] dataBytes = new byte[1024]; 

     int nread = 0; 
     while ((nread = fis.read(dataBytes)) != -1) { 
      md.update(dataBytes, 0, nread); 
     }; 
     byte[] mdbytes = md.digest(); 

     //convert the byte to hex format method 1 
     StringBuffer sb = new StringBuffer(); 
     for (int i = 0; i < mdbytes.length; i++) { 
      sb.append(Integer.toString((mdbytes[i] & 0xff) + 0x100, 16).substring(1)); 
     } 

     System.out.println("Hex format : " + sb.toString()); 

     //convert the byte to hex format method 2 
     StringBuffer hexString = new StringBuffer(); 
     for (int i=0;i<mdbytes.length;i++) { 
      hexString.append(Integer.toHexString(0xFF & mdbytes[i])); 
     } 

     System.out.println("Hex format : " + hexString.toString()); 
    } 
} 

我會,因爲性能原因,建議您檢查一下,如果你的數據庫有SHA支持。我知道Postgres does,不知道其他系統。

+1

密碼的SHA不應該是「出於性能原因」 - 這實際上是*不使用密碼哈希的一個很好的理由。雖然這確實通過MessageDigest顯示了一個SHA-1的例子(帶有一些額外的東西),但它是一個非常糟糕的例子,就是如何在數據庫中散列密碼。沒有鹽 - 彩虹表攻擊,SHA-1 - 暴力攻擊。 – user2246674 2013-05-01 18:11:37

+0

我嘗試jBCrypt,它完美的工作,但我不能用SHA1散列的密碼記錄。因爲這行在我的XML文件「spring-security.xml」 ** ** – Somar 2013-05-01 18:33:52

+0

我找到它它退出簡單! \t \t ** MessageDigestPasswordEncoder encoder = new MessageDigestPasswordEncoder(「SHA」); \t \t String hash = encoder.encodePassword(user.getPassword(),「」); ** – Somar 2013-05-01 19:07:54