真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JAVA中MD5的轉換

import java.io.UnsupportedEncodingException;

創(chuàng)新互聯(lián)專注于臺安網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供臺安營銷型網(wǎng)站建設,臺安網(wǎng)站制作、臺安網(wǎng)頁設計、臺安網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務,打造臺安網(wǎng)絡公司原創(chuàng)品牌,更為您提供臺安網(wǎng)站排名全網(wǎng)營銷落地服務。

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.Arrays;

import java.util.Scanner;

?

public class MD5{? ?

? ? ? ?

? ? private static final String HEX_NUMS_STR="0123456789ABCDEF";? ?

? ? private static final Integer SALT_LENGTH = 12;? ?

? ? ? ?

? ? /**? ?

? ? ?* 將16進制字符串轉換成字節(jié)數(shù)組? ?

? ? ?* @param hex? ?

? ? ?* @return? ?

? ? ?*/?

? ? public static byte[] hexStringToByte(String hex) {? ?

? ? ? ? int len = (hex.length() / 2);? ?

? ? ? ? byte[] result = new byte[len];? ?

? ? ? ? char[] hexChars = hex.toCharArray();? ?

? ? ? ? for (int i = 0; i < len; i++) {? ?

? ? ? ? ? ? int pos = i * 2;? ?

? ? ? ? ? ? result[i] = (byte)(HEX_NUMS_STR.indexOf(hexChars[pos]) << 4 | HEX_NUMS_STR.indexOf(hexChars[pos + 1]));? ?

? ? ? ? }? ?

? ? ? ? return result;? ?

? ? }? ?

?

? ? ? ?

? ? /**?

? ? ?* 將指定byte數(shù)組轉換成16進制字符串?

? ? ?* @param b?

? ? ?* @return?

? ? ?*/?

? ? public static String byteToHexString(byte[] b) {? ?

? ? ? ? StringBuffer hexString = new StringBuffer();? ?

? ? ? ? for (int i = 0; i < b.length; i++) {?

? ? ? ? //0XFF表示十進制的255,其中0X是java中用來申明16進制字符使用的,此時表示取當前字節(jié)的反碼

? ? ? ? ? ? String hex = Integer.toHexString(b[i] & 0xFF);??

? ? ? ? ? ? if (hex.length() == 1) {? ?

? ? ? ? ? ? ? ? hex = '0' + hex;? ?

? ? ? ? ? ? }? ?

? ? ? ? ? ? hexString.append(hex.toUpperCase());? ?

? ? ? ? }? ?

? ? ? ? return hexString.toString();? ?

? ? }? ?

? ? /**?

? ? ?* 獲得加密后的16進制形式字符串

? ? ?* @param password?

? ? ?* @return?

? ? ?* @throws NoSuchAlgorithmException?

? ? ?* @throws UnsupportedEncodingException?

? ? ?*/?

? ? public static String getEncryptedPwd(String sourceString)? ?

? ? ? ? ? ? throws NoSuchAlgorithmException, UnsupportedEncodingException {? ?

? ? ? ? //聲明加密后的口令數(shù)組變量? ?

? ? ? ? byte[] pwd = null;? ?

? ? ? ? //隨機數(shù)生成器? ?

? ? ? ? SecureRandom random = new SecureRandom();? ?

? ? ? ? //聲明鹽數(shù)組變量? ?

? ? ? ? byte[] salt = new byte[SALT_LENGTH];? ?

? ? ? ? //將隨機數(shù)放入鹽變量中? ?

? ? ? ? random.nextBytes(salt);? ?

?

? ? ? ? //聲明消息摘要對象? ?

? ? ? ? MessageDigest md = null;? ?

? ? ? ? //創(chuàng)建消息摘要? ?

? ? ? ? md = MessageDigest.getInstance("MD5");? ?

? ? ? ? //將鹽數(shù)據(jù)傳入消息摘要對象? ?

? ? ? ? md.update(salt);? ?

? ? ? ? //將口令的數(shù)據(jù)傳給消息摘要對象? ?

? ? ? ? md.update(sourceString.getBytes("UTF-8"));? ?

? ? ? ? //獲得消息摘要的字節(jié)數(shù)組? ?

? ? ? ? byte[] digest = md.digest();? ?

?

? ? ? ? //因為要在口令的字節(jié)數(shù)組中存放鹽,所以加上鹽的字節(jié)長度? ?

? ? ? ? pwd = new byte[digest.length + SALT_LENGTH];? ?

? ? ? ? //將鹽的字節(jié)拷貝到生成的加密口令字節(jié)數(shù)組的前12個字節(jié),以便在驗證口令時取出鹽? ?

? ? ? ? System.arraycopy(salt, 0, pwd, 0, SALT_LENGTH);? ?

? ? ? ? //將消息摘要拷貝到加密口令字節(jié)數(shù)組從第13個字節(jié)開始的字節(jié)? ?

? ? ? ? System.arraycopy(digest, 0, pwd, SALT_LENGTH, digest.length);? ?

? ? ? ? //將字節(jié)數(shù)組格式加密后的口令轉化為16進制字符串格式的口令? ?

? ? ? ? return byteToHexString(pwd);? ?

? ? }?

? ??

? ? /**?

? ? ?* 驗證口令是否合法?

? ? ?* @param password?

? ? ?* @param passwordInDb?

? ? ?* @return?

? ? ?* @throws NoSuchAlgorithmException?

? ? ?* @throws UnsupportedEncodingException?

? ? ?*/?

? ? public static boolean validPassword(String sourceString, String md5String)? ?

? ? ? ? ? ? throws NoSuchAlgorithmException, UnsupportedEncodingException {? ?

? ? ? ? //將16進制字符串格式口令轉換成字節(jié)數(shù)組? ?

? ? ? ? byte[] pwdInDb = hexStringToByte(md5String);? ?

? ? ? ? //聲明鹽變量? ?

? ? ? ? byte[] salt = new byte[SALT_LENGTH];? ?

? ? ? ? //將鹽從數(shù)據(jù)庫中保存的口令字節(jié)數(shù)組中提取出來? ?

? ? ? ? System.arraycopy(pwdInDb, 0, salt, 0, SALT_LENGTH);? ?

? ? ? ? //創(chuàng)建消息摘要對象? ?

? ? ? ? MessageDigest md = MessageDigest.getInstance("MD5");? ?

? ? ? ? //將鹽數(shù)據(jù)傳入消息摘要對象? ?

? ? ? ? md.update(salt);? ?

? ? ? ? //將口令的數(shù)據(jù)傳給消息摘要對象? ?

? ? ? ? md.update(sourceString.getBytes("UTF-8"));? ?

? ? ? ? //生成輸入口令的消息摘要? ?

? ? ? ? byte[] digest = md.digest();? ?

? ? ? ? //聲明一個保存數(shù)據(jù)庫中口令消息摘要的變量? ?

? ? ? ? byte[] digestInDb = new byte[pwdInDb.length - SALT_LENGTH];? ?

? ? ? ? //取得數(shù)據(jù)庫中口令的消息摘要? ?

? ? ? ? System.arraycopy(pwdInDb, SALT_LENGTH, digestInDb, 0, digestInDb.length);? ?

? ? ? ? //比較根據(jù)輸入口令生成的消息摘要和數(shù)據(jù)庫中消息摘要是否相同? ?

? ? ? ? if (Arrays.equals(digest, digestInDb)) {? ?

? ? ? ? ? ? //口令正確返回口令匹配消息? ?

? ? ? ? ? ? return true;? ?

? ? ? ? } else {? ?

? ? ? ? ? ? //口令不正確返回口令不匹配消息? ?

? ? ? ? ? ? return false;? ?

? ? ? ? }? ?

? ? }??

?

? ? public static void? main(String[] args){

? ? System.out.println("-----------------MD5加密 start--------------------");

? ? try {

? ? System.out.print("-----------------請輸入您要加密的內容按enter鍵后執(zhí)行:");

? ? Scanner scanner = new Scanner(System.in);

? ? String sourceString = scanner.nextLine();

? ? String md5String = getEncryptedPwd(sourceString);

? ?

? ? System.out.println("----------加密前:"+sourceString);

? ? System.out.println("----------加密后:"+md5String);

? ? boolean falg = validPassword(sourceString,md5String);

? ? System.out.println("----------輸入字符串校驗結果:"+falg);

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.println("-----------------MD5加密 end--------------------");

? ? }

}


分享標題:JAVA中MD5的轉換
轉載源于:http://weahome.cn/article/gchihd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部