1. 程式人生 > >Java/Android中的MD5加密加鹽方法

Java/Android中的MD5加密加鹽方法

MD5加密不加鹽方法:

MD5是一個安全的雜湊演算法(Hash Functions),是雜湊演算法中的一種,輸入兩個不同的明文不會得到相同的輸出值。根據密文不能得到明文,其過程不可逆,也就是MD5只能用於加密認證,密文是無法解密。

程式碼:

public String md5(String str) {
		MessageDigest messageDigest = null;
		try {
			messageDigest = MessageDigest.getInstance("MD5");
			messageDigest.reset();
			messageDigest.update(str.getBytes("UTF-8"));
		} catch (NoSuchAlgorithmException e) {
			System.exit(-1);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		byte[] byteArray = messageDigest.digest();
		StringBuffer md5StrBuff = new StringBuffer();
		for (int i = 0; i < byteArray.length; i++) {
			if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
				md5StrBuff.append("0").append(
						Integer.toHexString(0xFF & byteArray[i]));
			else
				md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
		}
		return md5StrBuff.toString();
	}

MD5加密加鹽方法:

雖然MD5自身是不可逆,但是現在網路上的MD5資料庫的資料量已經非常龐大,大部分常用密碼都可以通過碰撞的方法給暴力破解出來,網上比較有名的有彩虹表都能很好的破解常用MD5加密,所以一般通過加鹽的方式來提高資料的安全;

鹽值加密:把你原來密碼,加上一些鹽然後再進行一些列的加密演算法。比如你的密碼是:899312 使用者名稱是:jiandansecurity 中鹽值加密可以是這樣加鹽的899312{jiandan然後 ,在進行一些列的加密

程式碼:

package com.itgocome.framework.security;

import java.security.MessageDigest;
import java.util.Random;

import org.apache.commons.codec.binary.Hex;

/**
 * @author Rain
 * @email 
[email protected]
* @date 2013-06-01 */ public class PasswordUtil { /** * 生成含有隨機鹽的密碼 */ public static String generate(String password) { Random r = new Random(); StringBuilder sb = new StringBuilder(16); sb.append(r.nextInt(99999999)).append(r.nextInt(99999999)); int len = sb.length(); if (len < 16) { for (int i = 0; i < 16 - len; i++) { sb.append("0"); } } String salt = sb.toString(); password = md5Hex(password + salt); char[] cs = new char[48]; for (int i = 0; i < 48; i += 3) { cs[i] = password.charAt(i / 3 * 2); char c = salt.charAt(i / 3); cs[i + 1] = c; cs[i + 2] = password.charAt(i / 3 * 2 + 1); } return new String(cs); } /** * 校驗密碼是否正確 */ public static boolean verify(String password, String md5) { char[] cs1 = new char[32]; char[] cs2 = new char[16]; for (int i = 0; i < 48; i += 3) { cs1[i / 3 * 2] = md5.charAt(i); cs1[i / 3 * 2 + 1] = md5.charAt(i + 2); cs2[i / 3] = md5.charAt(i + 1); } String salt = new String(cs2); return md5Hex(password + salt).equals(new String(cs1)); } /** * 獲取十六進位制字串形式的MD5摘要 */ public static String md5Hex(String src) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] bs = md5.digest(src.getBytes()); return new String(new Hex().encode(bs)); } catch (Exception e) { return null; } } public static void main(String[] args) { String password = generate("admin"); System.out.println(verify("admin", password)); } }


相關推薦

AndroidMD5加密

MD5加密不加鹽方法: MD5是一個安全的雜湊演算法(Hash Functions),是雜湊演算法中的一種,輸入兩個不同的明文不會得到相同的輸出值。根據密文不能得到明文,其過程不可逆,也就是MD5只能用於加密認證,密文是無法解密。 程式碼: [java] view plain copy print

Java/AndroidMD5加密方法

MD5加密不加鹽方法: MD5是一個安全的雜湊演算法(Hash Functions),是雜湊演算法中的一種,輸入兩個不同的明文不會得到相同的輸出值。根據密文不能得到明文,其過程不可逆,也就是MD

androidMD5加密工具類

/**  * md5工具類  *   * @author xiaoke  *   */ public class MD5Util {/*** * @param psdMD5要加密的物件* @returnMD5加密後市返回一個32位數的字串,返回“”,代表加密異常*/pub

ShiroMD5位密碼加密方法

package com.hp.util; import org.apache.shiro.crypto.hash.Md5Hash; public class Md5Util { // 設定加鹽加密的方式 public static String md5(String

密碼Md5加密+

package com.example.phone.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Digest

MD5+DES在C#.NET與Java/Android解密使用

main 模式 NPU ++ 代碼 加密、解密 ets 推薦 lock 一、背景後臺(C#.NET)使用一個MD5+DES的加解密算法,查了下,很多網友都使用了這個算法。在Android裏,也需要這個算法,如何把這個加解密算法切換成Java版,成了難題。畢竟好久沒涉及到這一

Javamd5加密

com char common span edi case codec mdt imp 方法一、 public final static String md5(String s) { char hexDigits[] = {‘0‘,‘1‘,‘2‘,‘

Java/Android的3DES加密

3DES(或稱為Triple DES)是通過DES進行3次加密,金鑰的長度為DES的金鑰3倍,加密後的資料長度與DES加密長度相同。安全方面相對於DES加密更加安全,不容易被破解。 程式碼: /* 定義加密方式, DESede:加密演算法; ECB:工作模式 ; NOPad

Java/Android的DES加密

DES (Data Encrypt Standard資料庫加密標準) 是一種對稱加密演算法,目前在安全方面沒有AES那麼安全,所以逐漸被市場淘汰。一些系統都已經放棄使用DES加密,採用3DES或者AES加密,不過一些過老的系統中還是採用DES加密,所以將程

Java/Android漢字轉拼音的兩種方法,優劣比較

一、前言 在我們的開發中,有時會有這樣的需求,就是聯絡人列表按照拼音順序排列(如通訊錄)。於是,我也在網上搜到了許多這類的文章,就兩種最常見的做法在此進行簡單的比較和分析 二、漢字轉拼音的方法 使用第三方pinyin4j的jar包。 下載地址  , Android St

JAVAMD5加密MD5工具類)

工具類如下:import java.security.MessageDigest; /** * @Author:Starry * @Description: * @Date:Created in 9

hashlib 文件校驗,MD5動態返回加密後字符

str span 文件 date code return tro mod update hashlib 文件校驗 # for循環校驗 import hashlib def check_md5(file): ret = hashlib.md5() with

javaMD5加密解密

package com.util; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import sun.misc.BASE64Encoder; /

Java/AndroidSHA1和SHA256加密

SHA1(Secure Hash Algorithm,譯作安全雜湊演算法)是Hash演算法中的一種,適合用於數字簽名資料認證,加密過程不可逆不能進行解密。 MD5與SHA1都是Hash演算法,MD

md5 原理和常用的方法

現在的MD5密碼資料庫的資料量已經非常龐大了,大部分常用密碼都可以通過MD5摘要反向查詢到密碼明文。為了防止內部人員(能夠接觸到資料庫或者資料庫備份檔案的人員)和外部入侵者通過MD5反查密碼明文,更好地保護使用者的密碼和

潛移默化學會WPF(安全篇<一>)--MD5加密三種方法實踐 - AYUI框架 - 博客園

get exist 發揮 post bstr alt ado hpa bst 原文:潛移默化學會WPF(安全篇)--MD5加密三種方法加實踐 - AYUI框架 - 博客園一、MD5潛移默化公式 System.Web.Security.FormsAuthe

JavaMD5加密、解密工具類

length pri 一個 stringbu util new ron abc 轉換 package org.hzp.util; import java.io.UnsupportedEncodingException; import java.security.

js md5加密的使用方法

加密 方式 使用 nbsp http files md5 hex 使用方式 1, 有一些怕別別人獲取到的信息就需要加密一下啦,這裏說一下 MD5的使用方式,很簡單 首先下載 http://files.cnblogs.com/tuyile006/md5.rar 2.

Java反射method.isBridge() 橋接方法

clas interface rgs super logs his oid @override 查看 橋接方法是 JDK 1.5 引入泛型後,為了使Java的泛型方法生成的字節碼和 1.5 版本前的字節碼相兼容,由編譯器自動生成的方法。我們可以通過Method.isBrid

php登錄加密

也會 由於 body 再計算 針對 校驗 成功 salt 弱密碼 1 背景 涉及身份驗證的系統都需要存儲用戶的認證信息,常用的用戶認證方式主要為用戶名和密碼的方式,為了安全起見,用戶輸入的密碼需要保存為密文形式,可采用已公開的不可逆的hash加密算法,比如S