关于java中MD5加密(可直接使用)
本文转自:http://www.cnblogs.com/solove/archive/2011/10/18/2216715.html
上部分是转载的关于字符串的加密,后半部分则比较全,包括字符串、文件、字节数组、等
- package util;
- import java.security.MessageDigest;
- public class Encript {
- //十六进制下数字到字符的映射数组
- private final static String[] hexDigits = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};
- /**把inputString加密*/
- public static String md5(String inputStr){
- return encodeByMD5(inputStr);
- }
- /**
- * 验证输入的密码是否正确
- * @param password 真正的密码(加密后的真密码)
- * @param inputString 输入的字符串
- * @return 验证结果,boolean类型
- */
- public static boolean authenticatePassword(String password,String inputString){
- if(password.equals(encodeByMD5(inputString))){
- return true;
- }else{
- return false;
- }
- }
- /**对字符串进行MD5编码*/
- private static String encodeByMD5(String originString){
- if (originString!=null) {
- try {
- //创建具有指定算法名称的信息摘要
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
- byte[] results = md5.digest(originString.getBytes());
- //将得到的字节数组变成字符串返回
- String result = byteArrayToHexString(results);
- return result;
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- return null;
- }
- /**
- * 轮换字节数组为十六进制字符串
- * @param b 字节数组
- * @return 十六进制字符串
- */
- private static String byteArrayToHexString(byte[] b){
- StringBuffer resultSb = new StringBuffer();
- for(int i=0;i<b.length;i++){
- resultSb.append(byteToHexString(b[i]));
- }
- return resultSb.toString();
- }
- //将一个字节转化成十六进制形式的字符串
- private static String byteToHexString(byte b){
- int n = b;
- if(n<0)
- n=256+n;
- int d1 = n/16;
- int d2 = n%16;
- return hexDigits[d1] + hexDigits[d2];
- }
- }
- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
- package com.angsentech.ssm.util; - import java.io.File; 
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;- /** 
 * MD5加密处理工具类
 * @author Administrator
 *
 */- public class MD5Utils { 
 /**
 * 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合
 */
 protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',
 '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };- protected static MessageDigest messagedigest = null; 
 static {
 try {
 messagedigest = MessageDigest.getInstance("MD5");
 } catch (NoSuchAlgorithmException nsaex) {
 System.err.println(MD5Utils.class.getName()
 + "初始化失败,MessageDigest不支持MD5Util。");
 nsaex.printStackTrace();
 }
 }- /** 
 * 生成字符串的md5校验值
 *
 * @param s
 * @return
 */
 public static String getMD5String(String s) {
 return getMD5String(s.getBytes());
 }- /** 
 * 判断字符串的md5校验码是否与一个已知的md5码相匹配
 *
 * @param password
 * 要校验的字符串
 * @param md5PwdStr
 * 已知的md5校验码
 * @return
 */
 public static boolean isEqualsToMd5(String password, String md5PwdStr) {
 String s = getMD5String(password);
 return s.equals(md5PwdStr);
 }- /** 
 * 生成文件的md5校验值
 *
 * @param file
 * @return
 * @throws IOException
 */
 public static String getFileMD5String(File file) throws IOException {
 InputStream fis;
 fis = new FileInputStream(file);
 byte[] buffer = new byte[1024];
 int numRead = 0;
 while ((numRead = fis.read(buffer)) > 0) {
 messagedigest.update(buffer, 0, numRead);
 }
 fis.close();
 return bufferToHex(messagedigest.digest());
 }- /** 
 * 生成字节数组的md5校验值
 *
 * @param s
 * @return
 */
 public static String getMD5String(byte[] bytes) {
 messagedigest.update(bytes);
 return bufferToHex(messagedigest.digest());
 }- private static String bufferToHex(byte bytes[]) { 
 return bufferToHex(bytes, 0, bytes.length);
 }- private static String bufferToHex(byte bytes[], int m, int n) { 
 StringBuffer stringbuffer = new StringBuffer(2 * n);
 int k = m + n;
 for (int l = m; l < k; l++) {
 appendHexPair(bytes[l], stringbuffer);
 }
 return stringbuffer.toString();
 }- private static void appendHexPair(byte bt, StringBuffer stringbuffer) { 
 char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>>
 // 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同
 char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换
 stringbuffer.append(c0);
 stringbuffer.append(c1);
 }- /** 
 * 将源字符串使用MD5加密为字节数组
 * @param source
 * @return
 */
 public static byte[] encode2bytes(String source) {
 byte[] result = null;
 try {
 MessageDigest md = MessageDigest.getInstance("MD5");
 md.reset();
 md.update(source.getBytes("UTF-8"));
 result = md.digest();
 } catch (NoSuchAlgorithmException e) {
 e.printStackTrace();
 } catch (UnsupportedEncodingException e) {
 e.printStackTrace();
 }- return result; 
 }- /** 
 * 将源字符串使用MD5加密为32位16进制数
 * @param source
 * @return
 */
 public static String encode2hex(String source) {
 byte[] data = encode2bytes(source);
 StringBuffer hexString = new StringBuffer();
 for (int i = 0; i < data.length; i++) {
 String hex = Integer.toHexString(0xff & data[i]);- if (hex.length() == 1) { 
 hexString.append('0');
 }- hexString.append(hex); 
 }- return hexString.toString(); 
 }- /** 
 * 验证字符串是否匹配
 * @param unknown 待验证的字符串
 * @param okHex 使用MD5加密过的16进制字符串
 * @return 匹配返回true,不匹配返回false
 */
 public static boolean validate(String unknown , String okHex) {
 return okHex.equals(encode2hex(unknown));
 }
 }
关于java中MD5加密(可直接使用)的更多相关文章
- java中MD5加密的小使用
		最近项目中需要用到md5加密,就自己在网上看了看. package com.wxgs.ch01; import java.security.MessageDigest; import java.sec ... 
- java中md5加密方法
		package com.func; import java.io.UnsupportedEncodingException;import java.math.BigInteger;import jav ... 
- java中MD5加密
		MD5加密是一种不可逆(一些网站通过庞大的数据库可以解密一些简单的)的加密算法(其实是信息摘要算法),常用于用户密码,文件上传等 MD5算法具有以下特点: 1.压缩性:任意长度的数据,算出的MD5值长 ... 
- JAVA中MD5加密实现
		MD5加密实现 结 package com.pb; import java.io.UnsupportedEncodingException; import java.security.Message ... 
- 使用JAVA进行MD5加密后所遇到的一些问题
		前言:这几天在研究apache shiro如何使用,这好用到了给密码加密的地方,就碰巧研究了下java的MD5加密是如何实现的,下面记录下我遇到的一些小问题. 使用java进行MD5加密非常的简单,代 ... 
- Java生成MD5加密字符串代码实例
		这篇文章主要介绍了Java生成MD5加密字符串代码实例,本文对MD5的作用作了一些介绍,然后给出了Java下生成MD5加密字符串的代码示例,需要的朋友可以参考下 (1)一般使用的数据库中都会保存用 ... 
- Java实现MD5加密_字符串加密_文件加密
		Java实现MD5加密,具体代码如下: package com.bstek.tools; import java.io.FileInputStream; import java.io.IOExcept ... 
- Java实现MD5加密及解密的代码实例分享
		链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-0 ... 
- Java C# MD5 加密串一致性
		Java C# MD5 加密串一致性 Java public final static String md5(String s) { char hexDigits[] = { '0', '1', ... 
随机推荐
- 【你不知道的javaScript 上卷 笔记3】javaScript中的声明提升表现
			console.log( a ); var a = 2; 执行输出undefined a = 2; var a; console.log( a ); 执行输出2 说明:javaScript 运行时在编 ... 
- H3C ARP配置
			一.ARP简介 ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(或称物理地址)的协议. 在网络中,当主机或其它网络设备有数据要发送给另 ... 
- requests-验证码登录
			ModuleNotFoundError: No module named 'bs4': 解决方法:pip install beautifulsoup4 https://blog.csdn.net/wi ... 
- Appium+python自动化-Android夜神模拟器
			前言 Android SDK虽然也自带了模拟器,但是那速度会让你怀疑人生,并且不稳定经常卡死异常.夜神模拟器可以说是android模拟器里面的一个神器. 环境安装 1.官网下载地址:https://w ... 
- Linux内核0.11代码阅读(转)
			最近决定开始阅读Linux 0.11的源代码. 学习Linux操作系统的核心概念最好的方法莫过于阅读源代码.而Linux当前最新的源代码包已经有70MB左右,代码十分庞大,要想深入阅读十分困难.而Li ... 
- java mail发送html格式的邮件
			// 获取系统属性 Properties properties = System.getProperties(); // 设置邮件服务器 properties.setProperty("ma ... 
- StackExchange.Redis 之 SortedSet 类型示例
			1,增加操作 RedisCacheHelper.Instance.ZSortadd(); RedisCacheHelper.Instance.ZSortadd(); RedisCacheHelper. ... 
- c语言 memcpy()
			原文地址:https://blog.csdn.net/qq_21792169/article/details/50561570 头文件:#include <string.h> memcpy ... 
- View -->Controller传值的几种方法
			1.参数名称必须和表单的name是一致的. //参数的名称需要和表单的字段名称一致,这样系统便会直接赋值. public ActionResult GetUserInfo(string usernam ... 
- Win10激活工具 —— HWIDGen的使用方法
			一:引言 众所周知,Windows系统在安装完成之后,第一步就是激活系统,网上的一些激活方法大多数都是KMS激活,激活持续时间为半年. 因此,我找到了一个可以永久激活的工具:HWIDGen,它可以数字 ... 
