转自:https://blog.csdn.net/jay314159/article/details/4918358

前言:

   MD5即Message-Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的算法之一,主流的编程语言均有MD5的实现。

  将数据(字符串)运算为另一固定长度值是加密的基本原理,MD5的前身有MD2、MD3、MD4。

  本文介绍使用MD5进行加密和验证,将原本的字符串通过MD5加密后成另一个字符串,而且根据新的字符串无法获得原字符串,但可以在不知道原始密码的情况下进行验证。

关键技术:

  通过java.security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入"MD5"则表明要使用MD5算法。

  MessageDigest的digest实例方法使用指定的字节数组对摘要进行最后更新,然后完成摘要计算,返回存放哈希值结果的季节数组,这个数组就是MD5加密产品。

  将加密后的字节数组转换成十六进制的字符窜,形成最终的密码。

  当输入字符串经过MD5加密后,得到的字符串与密码一样,则认为密码验证通过。

实例演示:

package com.zhanzhuang.md5;

import java.security.MessageDigest;

/**
* @author zhan zhuang
* @time 2018年6月8日下午1:48:06
*
*/
public class Encryption { public static void main(String[] args) { String password = Encryption.createPassword("123456"); System.out.println("对123456用MD5加密后的密码为:" + password); String inputstr = "1234"; System.out.println("1234与密码相同?" + Encryption.authenticatePassword(password, inputstr)); inputstr = "123456"; System.out.println("123456与密码相同?" + Encryption.authenticatePassword(password, inputstr)); } // 16进制下数字到字符的映射数组
private static String[] hexDigits = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c",
"d", "e", "f" }; // 将inputstr加密的方法
public static String createPassword(String inputstr) {
return encodeByMD5(inputstr);
} // 验证密码是否正确
public static boolean authenticatePassword(String pass, String inputstr) {
if (pass.equals((encodeByMD5(inputstr)))) {
return true;
} else {
return false;
}
} // 对字符串进行MD5编码
private static String encodeByMD5(String originstr) {
if (originstr != null) {
try {
// 创建具有指定算法名称的信息摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 使用指定的字节数组对摘要进行最后的更新,然后完成摘要计算
byte[] results = md.digest(originstr.getBytes());
// 将得到的字节数组编程字符串返回
String resultString = byteArrayToHexString(results);
return resultString.toUpperCase();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return null;
} // 转换字节数组为十六进制字符串
private static String byteArrayToHexString(byte[] b) {
StringBuffer resultsb = new StringBuffer();
int i = 0;
for (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];
} }

 

Java对字符串使用MD5进行加密(亲测有效)的更多相关文章

  1. java生成字符串的MD5值

    下面的代码实现了MD5值的生成: public class MD5Test2 { public static void main(String[] args) { System.out.println ...

  2. Java代码中执行Linux命令,亲测可用

    前提需要知道怎么在linux怎么新建java文件和怎么编译,否则请先学其他知识!! import java.io.*;public class Test{ public static void mai ...

  3. java安装1335错误解决办法(亲测)

    心血来潮想了解一下java,结果一开始就碰到了让心"恶心"的1335错误. 废话不多说,直接看下面: 你可以先尝试在这个链接下载java.exe文件 http://www.orac ...

  4. java swing 制作一个登陆界面,亲测有效

    一.介绍 Swing 是一个为Java设计的GUI工具包. Swing是JAVA基础类的一部分. Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表. Swing提供许多比AWT ...

  5. java实现解压zip文件,(亲测可用)!!!!!!

    项目结构: Util.java内容: package com.cfets.demo; import java.io.File; import java.io.FileOutputStream; imp ...

  6. Java利用MessageDigest提供的MD5算法加密字符串或文件

    MD5是常用的加密算法,也经常用于校验信息完整,如文件的完整性.用术语讲,MD5是一种消息摘要算法(Message Digest Algorithm).另外还有一种常用的消息摘要算法SHA1.如果想了 ...

  7. 【转】Java生成对应字符串的MD5密码模块

    原文网址:http://www.cnblogs.com/xudong-bupt/archive/2013/05/10/3070899.html (1)一般使用的数据库中都会保存用户名和密码,其中密码不 ...

  8. (转)Java字符串应用之密码加密与验证

    1.通过java.Security.MessageDigest的静态方法getInstance创建具有指定算法名称的信息摘要,参数为算法名,传入”MD5“则表示使用MD5算法    2.Message ...

  9. Md5的加密 java实现

    百度百科对MD5的说明是: Message Digest Algorithm MD5(中文名为消息摘要算法第 五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护. MD5即Mess ...

随机推荐

  1. C#常用插件和工具

    Code generation(代码自动生成) NVelocity CodeSmith X-Code .NET XGoF - NMatrix / DEVerest Compilation(编译工具) ...

  2. js object对象赋值bug和对象复制clone方法

    最近在写程序的时候发现,如果新建一个object对象objb,初始化值为obja,如果改变了objb对象的字段值,那么obja也会随之改变,看来对象赋值传递的是一个引用. 代码重现: <scri ...

  3. java成员内部类

    java成员内部类依赖于外部类而存在,故创建内部类需要首先创建其关联的外部类. public class Test { public static void main(String args[]) { ...

  4. 【python】python中__name__的使用

    Py1.py #!/usr/bin/env python def test(): print '__name__ = ',__name__ if __name__ == '__main__': tes ...

  5. TroubleShoot: Fail to deploy Windows UAP to device: 0x80073CFD

    After creating "Blank App(Windows Universal)" targeting Windows Phone 10 in Visual Studio ...

  6. Kibana 基础入门

    原文地址:Kibana 基础入门 博客地址:http://www.extlight.com 一.前言 Kibana 是一个开源的分析和可视化平台,旨在与 Elasticsearch 合作.Kibana ...

  7. JAVA Date类与Calendar类【转】

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

  8. C++ STL Set 集合

    前言 set是STL中的一种关联容器.集合具有无序性,互异性等特点.熟练使用STL中的set模板类,可以比较简单的解决一些编程问题. 关联容器:元素按照关键字来保存和访问,STL中的map,set就是 ...

  9. bzoj3668 起床困难综合症

    Description 21 世纪,许多人得了一种奇怪的病:起床困难综合症,其临床表现为:起床难,起床后精神不佳.作为一名青春阳光好少年,atm 一直坚持与起床困难综合症作斗争.通过研究相关文献,他找 ...

  10. SQL 字段查找

    select [name] from sysobjects where [id] in (select [id] from syscolumns where [name]='a1') SQL 2005 ...