2016-07-25 147 views
-1

我使用此代碼加密密碼密碼加密

public static byte[] encrypt(String password) { 
     try { 
      BASE64Encoder be = new BASE64Encoder(); 
      MessageDigest md = MessageDigest.getInstance("sha-512"); 
      md.update(password.getBytes()); 
      return md.digest(); 
     } catch (NoSuchAlgorithmException e) { 
     } 
     return null; 
    } 

如果我使用此代碼對口令進行比較它完美

if (encrypt(passwordField.getText()).compareTo(encrypt("password")) == 0) 
    system.out.print("true") 
else *false 

,我想,所以我使用的控制檯結果來隱藏我的密碼System.out.println(encrypt("Password"))比較,所以我的代碼看起來像這樣

if (encrypt(passwordField.getText()).compareTo("5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5+buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/n"+ 
"NvwKPoX4uw==") == 0) 
      system.out.print("true") 
     else *false 

它總會輸出FAL se。我不明白爲什麼。 感謝您的時間

+0

首先SHA-512是一個不可逆的散列函數。另一方面,加密是可逆的。 –

+0

你是如何創建「5sg7KCrrLgIoRFlXIcwAu9pHyyRTfBd5 + buE8EA54Wdua6hXPliNoQUlEOOqCjKp5Vh5riKwwtYh/nNvwKPoX4uw ==」?它沒有有效的Base64長度,因此比SHA-512輸出長。 –

+1

你不應該使用簡單的散列函數來保護你的用戶密碼。你需要使用像PBKDF2,bcrypt,scrypt和Argon2這樣強大的散列方案。一定要使用高成本因子/迭代次數。選擇成本是很常見的,因此一次迭代至少需要100ms。查看更多:[如何安全哈希密碼?](http://security.stackexchange.com/q/211/45523) –

回答

1

你應該閱讀有關散列...

在散列如果你嘗試編碼字符串,說「你好」每一次你會得到不同的輸出,雖然要在編碼相同的字符串.. 。

嘗試FOLL ..

for(i=1;i<10;i++) 
    System.out.println(encrypt("password")); 

您將獲得9差異results..but他們仍然是相當

https://en.wikipedia.org/wiki/Cryptographic_hash_function

+0

這是因爲每次產生不同的鹽。 –