zoukankan      html  css  js  c++  java
  • MD5加密

     1 package com.jdk7.chapter5;
     2 
     3 import java.security.MessageDigest;
     4 import java.security.NoSuchAlgorithmException;
     5 
     6 public class PassWord {
     7     //该字符串数组元素与转换后的十六进制数一一对应
     8     private static String[] nums = new String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a",
     9             "b", "c", "d", "e", "f"};
    10     
    11     /**
    12      * 1.将加密字符串分解为byte[]
    13      * 2.调用java.security.MessageDigest的静态方法获取对象,再调用实例方法digest将分解的byte[]生成对应的长度为16的byte[]
    14      * 3.将长度为16的byte[]转换为十六进制
    15      * 4.将数组中每个byte类型值转换为十六进制,从而实现byte[]全部转换为十六进制
    16      * 5.将转换后的十六进制字符串拼接
    17      * @param str
    18      * @return
    19      * @throws NoSuchAlgorithmException
    20      */
    21     public static String createPassword(String str) throws NoSuchAlgorithmException{
    22         byte[] b = str.getBytes();
    23         for(int i=0;i<b.length;i++){
    24             System.out.print(b[i]+" ");
    25         }
    26         System.out.println();
    27         byte[] bt = MessageDigest.getInstance("MD5").digest(b);
    28         
    29         for(int i=0;i<bt.length;i++){
    30             System.out.print(bt[i]+" ");
    31         }
    32         System.out.println();
    33         
    34         String results = byteArrayToHexString(bt).toUpperCase();
    35         return results;
    36     }
    37 
    38     private static String byteArrayToHexString(byte[] bt) {
    39         StringBuffer sb = new StringBuffer();
    40         for(int i=0;i<bt.length;i++){
    41             sb.append(byteToHexString(bt[i]));
    42         }
    43         return sb.toString();
    44     }
    45     
    46     /**
    47      * byte和int类型间相互转换,int范围基于[-256,256]
    48      * int类型强制转换为byte时,如int i值大于127则自减256; 如果范围为int i为[0,127],则取i对应的值 ; 如果int i在[-256,-128)则自加256 ;如果int i为[-128,0]则取i对应的值 
    49      * 续上:byte再转换为int时,如byte b小于等于零则自加256; 如果范围为int i为(0,127]
    50      * @param b
    51      * @return
    52      */
    53     private static String byteToHexString(byte b) {
    54         int n = b;
    55         //该规则主要是int类型转换为byte类型规则的逆向
    56         if(n<=0){
    57             n = n+256;
    58         }
    59         byte b1 = (byte)n;
    60         int d1 = n / 16;
    61         int d2 = n % 16;
    62         return nums[d1]+nums[d2];
    63     }
    64 
    65     public static void main(String[] args) throws NoSuchAlgorithmException {
    66         System.out.println(PassWord.createPassword("celineluo"));
    67         System.out.println(PassWord.createPassword("celineluo1"));
    68     }
    69 }
    70 
    71 
    72 执行结果:
    73 99 101 108 105 110 101 108 117 111 
    74 -75 -39 -40 -73 53 113 -16 -97 26 104 -34 -2 105 13 -120 -120 
    75 B5D9D8B73571F09F1A68DEFE690D8888
    76 99 101 108 105 110 101 108 117 111 49 
    77 53 -97 -35 83 102 21 53 -52 33 76 67 -117 -28 125 -80 -34 
    78 359FDD53661535CC214C438BE47DB0DE
  • 相关阅读:
    Centos7安装Redis-单节点
    解决物理机U盘安装Kali Linux2018.1,光驱无法加载问题
    做销售如何跟单,逼单!共20招!(转)
    销售沟通技巧(转)
    rails gem (2015-07-16)
    Foundation
    Redis TTL 为0
    Introspection反射机制
    will_paginate
    Linux下Rsync+Inotify-tools实现数据实时同步
  • 原文地址:https://www.cnblogs.com/celine/p/8467559.html
Copyright © 2011-2022 走看看