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

     1 package Huang.company;
     2 import java.security.MessageDigest;
     3 import java.security.NoSuchAlgorithmException;
     4 /**
     5 * @author stunet
     6 *
     7 * 采用Java对字符串进行MD5的加密以及验证示例
     8 *
     9 */
    10 public class MD5DigestDemo {
    11 public static void main(String[] args) {
    12 
    13 try {
    14 // 进行字符串加密
    15 String password = "huangyuan";
    16 System.out.println("加密前的字符串" +password);
    17 System.out.println("加密后字符串:" + MD5DigestDemo.md5Digest(password));
    18 // 进行字符串验证
    19 String validate = MD5DigestDemo.md5Digest(password);
    20 String passwordValidate = password;
    21 boolean isSuccess = MD5DigestDemo.isValidate(toBytes(validate),passwordValidate);
    22 if (isSuccess)
    23 System.out.println("验证成功!");
    24 else
    25 System.out.println("验证失败!");
    26 } catch (NoSuchAlgorithmException e) {
    27 e.printStackTrace();
    28 }
    29 }
    30 
    31 /**
    32 *
    33 * @param password
    34 * 需要加密的字符串
    35 * @return 加密后的字符串
    36 * @throws NoSuchAlgorithmException
    37 */
    38 public static String md5Digest(String password)
    39 throws NoSuchAlgorithmException {
    40 String temp;
    41 MessageDigest alg = MessageDigest.getInstance("MD5");
    42 alg.update(password.getBytes());
    43 byte[] digest = alg.digest();
    44 temp = byte2hex(digest);
    45 return temp;
    46 }
    47 /**
    48 *
    49 * @param digest
    50 * 加密后的字符串
    51 * @param password
    52 * 验证的字符串
    53 * @return 验证是否成功
    54 * @throws NoSuchAlgorithmException
    55 */
    56 public static boolean isValidate(byte[] digest, String password)
    57 throws NoSuchAlgorithmException {
    58 boolean flag = false;
    59 MessageDigest alg = MessageDigest.getInstance("MD5");
    60 alg.update(password.getBytes());
    61 if (MessageDigest.isEqual(digest, alg.digest()))
    62 flag = true;
    63 else
    64 flag = false;
    65 return flag;
    66 }
    67 /*
    68 * 二进制转换为十六进制字符串
    69 *
    70 * @param b 二进制数组 @return 十六进制字符串
    71 */
    72 private static String byte2hex(byte[] bytes) {
    73 String hs = "";
    74 String stmp = "";
    75 for (int i = 0; i < bytes.length; i++) {
    76 stmp = (java.lang.Integer.toHexString(bytes[i] & 0XFF));
    77 if (stmp.length() == 1)
    78 hs = hs + "0" + stmp;
    79 else
    80 hs = hs + stmp;
    81 }
    82 return hs.toUpperCase();
    83 }
    84 /*
    85 * 把字符串转换成byte[]
    86 *
    87 * @param hex 要转换的字符串 @return 转换后的byte[]
    88 */
    89 private static byte[] toBytes(String hex) {
    90 byte[] bytes = new byte[16];
    91 for (int i = 0, j = 0; i < hex.length(); i = i + 2, j++) {
    92 bytes[j] = Integer.valueOf(hex.substring(i, i + 2), 16).byteValue();
    93 }
    94 return bytes;
    95 }
    96 }
    转载
  • 相关阅读:
    刷题-力扣-414. 第三大的数
    刷题-力扣-976. 三角形的最大周长
    刷题-力扣-942. 增减字符串匹配
    刷题-力扣-409. 最长回文串
    扛把子组20191121-4 Final发布用户使用报告
    Scrum立会报告+燃尽图 07
    Final发布
    扛把子组20191121-3 Final阶段贡献分配规则
    扛把子组20191121-10 Scrum立会报告+燃尽图 06
    Scrum立会报告+燃尽图 05
  • 原文地址:https://www.cnblogs.com/liun1994/p/4195270.html
Copyright © 2011-2022 走看看