2012-11-05 35 views
0

我有一個web服務(Java),它需要所有情況下的密碼。但密碼必須安全地到我身邊。是否有適用於所有平臺的標準方式 - > java加密/解密。我如何解密一個可能來自隨機平臺的字符串(php,.net,iPhone)。webservice的字符串解密

+1

該標準稱爲SSL/TLS。不要嘗試任何可愛的哈希技術,你會得到他們錯誤的。 – CodesInChaos

回答

0

通常密碼使用某種算法說(MD5)加密並與服務交換......您不必解密密碼......它就像您創建密碼的MD5哈希字符串,密鑰是實際的密碼它自我。

所以在服務器上,你將存儲實際的密碼的MD5哈希和每個客戶端將創建給定的密碼的MD5哈希字符串,最後你會驗證密碼驗證兩個散列串...

你會很容易找到的java碼在線創建MD5哈希......一個例子是

public static String convertStringToMD5Hash(String string) { 
    byte[] hash; 

    try { 
     hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); 
    } catch (NoSuchAlgorithmException e) { 
     throw new RuntimeException("MD5 not supported?", e); 
    } catch (UnsupportedEncodingException e) { 
     throw new RuntimeException("UTF-8 not supported?", e); 
    } 

    StringBuilder hex = new StringBuilder(hash.length * 2); 

    for (byte b : hash) { 
     int i = (b & 0xFF); 
     if (i < 0x10) 
      hex.append('0'); 
     hex.append(Integer.toHexString(i)); 
    } 

    return hex.toString(); 
} 

免責聲明:代碼工作在我的機器上,並可能需要 改進/優化生產使用

+0

另外檢查在我的數據庫中的apache commons編解碼器(commons.apache.org) – Adil

+0

中的DigestUtils密碼掩蓋了一個簡單的算法,我不能將它們切換到md5。所以如果一個PHP客戶端發給我一個加密的字符串,我必須從db獲取密碼並用相同的方法加密,然後比較它們。我怎麼能確定如果加密在java中產生相同的字符串。 – rdonuk

+0

這是不好的...您使用哪種算法將密碼存儲在數據庫中,並且可以從中恢復實際密碼?它更好地使用兩側的標準算法... – Adil

0

就像@CodesInChaos在他的評論中說,使用SSL/TLS。如果你真的讚美安全,不要考慮其他選擇。如果我們想在這方面有創意,那麼您承擔風險...

+0

由於在Android,Windows等平臺上進行反向工程的機會,在移動應用程序中泄露SSL證書也存在爭議。 – Adil

+0

@AdilMughal該協議被稱爲安全。如果我們開始討論基於證書更改的攻擊,則不存在安全系統。 –