2010-10-29 30 views
1

我需要存儲客戶的駕駛執照#(大部分時間)(或個人ID),所以當他們來挑選他們的產品時,他們可以根據他們的身份證明自己。這通常是我國處處處理的方式(不幸的是)。不過,我想將這個#加密存儲在mysql中。我現在可以使用AES_ENCRYPT,但是,我的問題是,如果我對$key進行了硬編碼,那麼獲得服務器訪問權限的攻擊者可以輕鬆解密所有具有該密鑰的字段。我該如何處理這個問題?php - 在mysql中存儲加密的字符串

我想到的是或許使用openssl_public_encrypt並有一個公鑰和私鑰,但不知道如何實現它。 (任何好的鏈接解釋?)也許不對稱密鑰RSA?

我有幾個物理服務器可供使用,如果需要的話。

任何幫助將不勝感激。

回答

4

爲什麼您需要不對稱地加密這些許可證?

  1. 驗證用戶是否提供了有效的許可證。
  2. sha1許可證並保存到數據庫。
  3. 當您查找許可證時,請輸入用戶名並檢查它是否匹配。
+0

同意 - 不要將實際ID#存儲在任何地方。 – drudge 2010-10-29 22:32:01

+0

這是一個很好的觀察。可能是更好的方式去!但是,如果由於某種原因(我現在不知道),我們需要退回數字呢? – ashimi70 2010-10-29 22:34:52

+0

這是推薦的方式 - 即使您的服務器受到攻擊,黑客也無法使用哈希! – jusunlee 2010-10-29 22:35:47

0

我在過去所取得的成績並不是爲了保存完整的細節。

您需要的數字將被散列。更重要的是,這些字符串中的一些值的集合已經以您選擇的方式進行了加密。

你可以用這些關於用戶的相關信息。說出用戶的電子郵件或您生成的ID號碼。

當用戶驗證說'12345678'時,您已將1458的哈希值設置爲'$£%$ dfovm $£$'之類的值,其中包含部分電子郵件。

這樣,如果有人可以獲得訪問權限,他們永遠不會檢索所有的用戶數量。此外,如果他們以某種方式將解密版本的字符串拼湊在一起 - 它將會是許可證號碼和其他一些信息的喋喋不休。

0

一旦攻擊者有權訪問您的服務器,他們就可以運行您的代碼。因此,任何你的服務器必須解密爲純文本才能使用,攻擊者也可以。如上所述,您最好的選擇是以與密碼相同的方式加密ID,然後加密客戶輸入並進行比較,這樣您甚至無法訪問初始ID。