程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 應用MySQL加密函數掩護Web網站敏感數據的辦法分享

應用MySQL加密函數掩護Web網站敏感數據的辦法分享

編輯:MySQL綜合教程

應用MySQL加密函數掩護Web網站敏感數據的辦法分享。本站提示廣大學習愛好者:(應用MySQL加密函數掩護Web網站敏感數據的辦法分享)文章只能為提供參考,不一定能成為您想要的結果。以下是應用MySQL加密函數掩護Web網站敏感數據的辦法分享正文


假如您正在運轉應用MySQL的Web運用法式,那末它把暗碼或許其他敏感信息保留在運用法式裡的機遇就很年夜。掩護這些數據免受黑客或許窺測者的獲得是一個使人存眷的主要成績,由於您既不克不及讓未經受權的人員應用或許損壞運用法式,同時還要包管您的競爭優勢。榮幸的是,MySQL帶有許多設計用來供給這類類型平安的加密函數。本文概述了個中的一些函數,並解釋了若何應用它們,和它們可以或許供給的分歧級其余平安。

  雙向加密

  就讓我們從最簡略的加密開端:雙向加密。在這裡,一段數據經由過程一個密鑰被加密,只可以或許由曉得這個密鑰的人來解密。MySQL有兩個函數來支撐這類類型的加密,分離叫做ENCODE()和DECODE()。上面是一個簡略的實例:

  mysql> INSERT INTO users (username, password) VALUES ('joe', ENCODE('guessme', 'abracadabra'));

  Query OK, 1 row affected (0.14 sec)

  個中,Joe的暗碼是guessme,它經由過程密鑰abracadabra被加密。要留意的是,加密完的成果是一個二進制字符串,以下所示:

  mysql> SELECT * FROM users WHERE username='joe';

  +----------+----------+

  | username | password |

  +----------+----------+

  | joe | ?i??!? |

  +----------+----------+

  1 row in set (0.02 sec)

  abracadabra這個密鑰關於恢復到原始的字符串相當主要。這個密鑰必需被傳遞給DECODE()函數,以取得原始的、未加密的暗碼。上面就是它的應用辦法:

  mysql> SELECT DECODE(password, 'abracadabra') FROM users WHERE username='joe';

  +---------------------------------+

  | DECODE(password, 'abracadabra') |

  +---------------------------------+

  | guessme |

  +---------------------------------+

  1 row in set (0.00 sec)

  應當很輕易就看到它在Web運用法式裡是若何運轉的——在驗證用戶登錄的時刻,DECODE()會用網站公用的密鑰解開保留在數據庫裡的暗碼,並和用戶輸出的內容停止比較。假定您把PHP用作本身的劇本說話,那末可以像上面如許停止查詢:

  $query = "SELECT COUNT(*) FROM users WHERE username='$inputUser' AND DECODE(password, 'abracadabra') = '$inputPass'";?>

  提醒:固然ENCODE()和DECODE()這兩個函數可以或許知足年夜多半的請求,然則有的時刻您願望應用強度更高的加密手腕。在這類情形下,您可使用AES_ENCRYPT()和AES_DECRYPT()函數,它們的任務方法是雷同的,然則加密強度更高。

  單向加密

  單向加密與雙向加密分歧,一旦數據被加密就沒有方法倒置這一進程。是以暗碼的驗證包含對用戶輸出內容的從新加密,並將它與保留的密文停止比對,看能否婚配。一種簡略的單向加密方法是MD5校驗碼。MySQL的MD5()函數會為您的數據創立一個“指紋”並將它保留起來,供驗證測試應用。上面就是若何應用它的一個簡略例子:

  mysql> INSERT INTO users (username, password) VALUES ('joe', MD5('guessme'));

  Query OK, 1 row affected (0.00 sec)

  mysql> SELECT * FROM users WHERE username='joe';

  +----------+----------------------------------+

  | username | password |

  +----------+----------------------------------+

  | joe | 81a58e89df1f34c5487568e17327a219 |

  +----------+----------------------------------+

  1 row in set (0.02 sec)

  如今您可以測試用戶輸出的內容能否與曾經保留的暗碼婚配,辦法是獲得用戶輸出暗碼的MD5校驗碼,並將它與曾經保留的暗碼停止比對,就像上面如許:

  mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=MD5('guessme');

  +----------+

  | COUNT(*) |

  +----------+

  | 1 |

  +----------+

  1 row in set (0.00 sec)

  或許,您斟酌一下應用ENCRYPT()函數,它應用體系底層的crypt()體系挪用來完成加密。這個函數有兩個參數:一個是要被加密的字符串,另外一個是雙(或許多)字符的“salt”。它然後會用salt加密字符串;這個salt然後可以被用來再次加密用戶輸出的內容,並將它與先前加密的字符串停止比對。上面一個例子解釋了若何應用它:

  mysql> INSERT INTO users (username, password) VALUES ('joe', ENCRYPT('guessme', 'ab'));

  Query OK, 1 row affected (0.00 sec)

  mysql> SELECT * FROM users WHERE username='joe';

  +----------+---------------+
 | username | password |

  +----------+---------------+

  | joe | ab/G8gtZdMwak |

  +----------+---------------+

  1 row in set (0.00 sec)

  成果是

  mysql> SELECT COUNT(*) FROM users WHERE username='joe' AND password=ENCRYPT('guessme', 'ab');

  +----------+

  | COUNT(*) |

  +----------+

  | 1 |

  +----------+

  1 row in set (0.00 sec)

  提醒:ENCRYPT()只能用在*NIX體系上,由於它須要用究竟層的crypt()庫。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved