在Java中使用SHA1存储密码

问题描述:

我想使用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

如果必须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