java.security.MessageDigest的使用(1)!

來源:互聯網
上載者:User

    我們知道,編程中資料的傳輸,儲存,為了考慮安全性的問題,需要將資料進行加密.我們拿資料庫做例子.如果一個使用者註冊系統的資料庫,沒有對使用者的資訊進行儲存,如,我去頁面註冊,輸入"Vicky","123456".註冊.web伺服器未對資料進行加密而直接寫入資料庫,那麼資料庫中的使用者資訊,便是一個直接可用的資料!一旦伺服器伺服器被黑~那麼使用者的資訊將毫無保留的展現在駭客面前...為瞭解決這個弊端,現在大多數都會將資訊進行MD5加密.如"Vicky"與"123456"加密後,會產生16位或者32位字串.而駭客即便獲得這些資料也無法使用...

    MD5是常用的加密方法,這裡主要講述JDK中的java.security.MessageDigest加密方式!

@Test<br />public void testMD() {<br />try {<br />String username = "Vicky";<br />MessageDigest messageDigest = MessageDigest.getInstance("MD5");<br />messageDigest.update(username.getBytes());<br />String usernameMD5 = messageDigest.digest().toString();<br />System.out.println(usernameMD5);<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />} 列印的是:[B@107077e,這是因為輸出的是byte[](messageDigest.digest()得到的是個二進位byte數組,有可能某些byte是不可列印的字元。)...我們可以使用Base64來處理byte[]

@Test<br />public void testMD() {<br />try {<br />String username = "Vicky";<br />MessageDigest messageDigest = MessageDigest.getInstance("MD5");<br />messageDigest.update(username.getBytes());<br />System.out.println(Base64.encode(messageDigest.digest()));<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}

列印的是:AgwpBZPO+ErqxOosJp0ybQ== 

當然我們可以編寫函數,處理二進位轉hex字串.

如:

/**<br /> * 將16位byte[] 轉換為32位String<br /> *<br /> * @param buffer<br /> * @return<br /> */<br />private String toHex(byte buffer[]) {<br />StringBuffer sb = new StringBuffer(buffer.length * 2);<br />for (int i = 0; i < buffer.length; i++) {<br />sb.append(Character.forDigit((buffer[i] & 240) >> 4, 16));<br />sb.append(Character.forDigit(buffer[i] & 15, 16));<br />}</p><p>return sb.toString();<br />}

編寫測試語句

@Test<br />public void testMD() {<br />try {</p><p>String username = "Vicky";<br />MessageDigest messageDigest = MessageDigest.getInstance("MD5");<br />messageDigest.update(username.getBytes());<br />System.out.println(toHex(messageDigest.digest()));<br />} catch (Exception e) {<br />e.printStackTrace();<br />}<br />}

列印:020c290593cef84aeac4ea2c269d326d,返回的是32位的字串!!!

這樣我們便可以直接使用JDK為我們提供的加密類與函數了!

 

MessageDigest不僅僅只為我們提供了"MD5"加密,還提供了"SHA-1"

建立的方法只為: MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");

MD5與SHA-1的區別為:MD5是16位,SHA是20位(這是兩種報文摘要的演算法)

 

難道 MessageDigest 只能用作資料加密嗎?如何使用MessageDigest產生安全性權杖!!!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.