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

我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...

MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. StringusernameMD5=messageDigest.digest().toString();
  8. System.out.println(usernameMD5);
  9. }catch(Exceptione){
  10. e.printStackTrace();
  11. }
  12. }
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(Base64.encode(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印的是:AgwpBZPO+ErqxOosJp0ybQ==

当然我们可以编写函数,处理二进制转hex字符串.

如:

  1. /**
  2. *将16位byte[]转换为32位String
  3. *
  4. *@parambuffer
  5. *@return
  6. */
  7. privateStringtoHex(bytebuffer[]){
  8. StringBuffersb=newStringBuffer(buffer.length*2);
  9. for(inti=0;i<buffer.length;i++){
  10. sb.append(Character.forDigit((buffer[i]&240)>>4,16));
  11. sb.append(Character.forDigit(buffer[i]&15,16));
  12. }
  13. returnsb.toString();
  14. }

编写测试语句

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(toHex(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

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

这样我们便可以直接使用JDK为我们提供的加密类与函数了!

MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"

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

MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)

难道MessageDigest 只能用作数据加密吗?如何使用MessageDigest生成安全令牌!!!


转:http://blog.csdn.net/eclipser1987/article/details/5158784


我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进行保存,如,我去页面注册,输入"Vicky","123456".注册.web服务器未对数据进行加密而直接写入数据库,那么数据库中的用户信息,便是一个直接可用的数据!一旦服务器服务器被黑~那么用户的信息将毫无保留的展现在黑客面前...为了解决这个弊端,现在大多数都会将信息进行MD5加密.如"Vicky"与"123456"加密后,会生成16位或者32位字符串.而黑客即便获得这些数据也无法使用...

MD5是常用的加密方法,这里主要讲述JDK中的java.security.MessageDigest加密方式!

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. StringusernameMD5=messageDigest.digest().toString();
  8. System.out.println(usernameMD5);
  9. }catch(Exceptione){
  10. e.printStackTrace();
  11. }
  12. }
打印的是:[B@107077e,这是因为输出的是byte[](messageDigest.digest()得到的是个二进制byte数组,有可能某些byte是不可打印的字符。)...我们可以使用Base64来处理byte[]
  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(Base64.encode(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

打印的是:AgwpBZPO+ErqxOosJp0ybQ==

当然我们可以编写函数,处理二进制转hex字符串.

如:

  1. /**
  2. *将16位byte[]转换为32位String
  3. *
  4. *@parambuffer
  5. *@return
  6. */
  7. privateStringtoHex(bytebuffer[]){
  8. StringBuffersb=newStringBuffer(buffer.length*2);
  9. for(inti=0;i<buffer.length;i++){
  10. sb.append(Character.forDigit((buffer[i]&240)>>4,16));
  11. sb.append(Character.forDigit(buffer[i]&15,16));
  12. }
  13. returnsb.toString();
  14. }

编写测试语句

  1. @Test
  2. publicvoidtestMD(){
  3. try{
  4. Stringusername="Vicky";
  5. MessageDigestmessageDigest=MessageDigest.getInstance("MD5");
  6. messageDigest.update(username.getBytes());
  7. System.out.println(toHex(messageDigest.digest()));
  8. }catch(Exceptione){
  9. e.printStackTrace();
  10. }
  11. }

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

这样我们便可以直接使用JDK为我们提供的加密类与函数了!

MessageDigest不仅仅只为我们提供了"MD5"加密,还提供了"SHA-1"

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

MD5与SHA-1的区别为:MD5是16位,SHA是20位(这是两种报文摘要的算法)

难道MessageDigest 只能用作数据加密吗?如何使用MessageDigest生成安全令牌!!!


转:http://blog.csdn.net/eclipser1987/article/details/5158784

你可能感兴趣的:(MessageDigest)