2008-11-21 60 views
2

由於我的日常工作的一部分,我不得不施用古老,曾經依賴於下列身份驗證模式「只是內部的」 JSP Web應用程序的不幸:如何以編程方式加密/解密JSP中的純文本憑證?

... 

// Validate the user name and password. 
if ((user != null) && (password != null) && (
    (user.equals("brianmay") && password.equals("queen")) || 
    (user.equals("rogertaylor") && password.equals("queen")) || 
    (user.equals("freddiemercury") && password.equals("queen")) || 
    (user.equals("johndeacon") && password.equals("queen")) 
    )) { 
// Store the user name as a session variable. 
    session.putValue("user", user); 

... 

雖然我想,女王的成員從來都不是系統的使用者,但無論如何它確實是一個很好的例子,不是嗎?

儘管通過策略這個客戶端通過域身份驗證來強制執行安全性,所以這個問題並不被視爲安全風險,但我的想法是至少使用一個簡單的MD5混淆純文本憑證或SHA1方法,所以這種敏感數據肉眼不可見。

我是JSP的總新手,所以我非常感謝您願意與我分享的任何建議。

非常感謝!

回答

4

很難理解你正在考慮的確切方案,但我假設密碼是從請求中進來的,並且你想要在發送請求的JSP中計算MD5哈希值。之後,您可以將其與預先計算的MD5版本進行比較。如果未使用https完成,則可以更安全,並在提交密碼之前使用javascript MD5 library來散列密碼。

可以MD5在Java中的字符串是這樣的:

try 
{ 
    String digestInput = "queen"; 

    MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 
    messageDigest.update(digestInput.getBytes()); 

    BASE64Encoder base64Encoder = new BASE64Encoder(); 
    String digestString = base64Encoder.encode(messageDigest.digest()); 

    // digestString now contains the md5 hashed password 
} 
catch (Exception e) 
{ 
    // do some type of logging here 
} 
+0

美麗!非常感謝!什麼是最簡單的方式來存儲MD5哈希?純文本文件? – 2008-11-21 13:25:00

2

首先,您應該將該邏輯從jsp移動到單獨的類。

其次,你不應該在代碼中的任何地方保持純文本密碼。使用某種單向散列函數(md5,sha1,...)並僅保留密碼散列。

當檢查用戶密碼時,首先對它進行散列,然後比較散列。

+0

感謝很多的答覆好友。你介意一下你提到的技術嗎? – 2008-11-21 12:33:14

相關問題