MD5加密算法解析

知识库连接:

http://baike.baidu.com/view/7636.htm

http://baike.baidu.com/subview/350813/7544439.htm

http://baike.baidu.com/view/7600.htm

在线加密解密工具:http://www.3464.com/Tools/MD5/jiemi.asp

package com.md5;  

import java.security.MessageDigest;  

public class Md5 {  

    /**
* MD5加密 生成32位MD5码 方式一
* 16位的就是去掉开头和结尾的8位,就是中间的16位
* @param inStr 要加密的字符串
* @return 返回
*/
public final static String str2MD5(String inStr) {
char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
'e', 'f' };
try {
byte[] strTemp = inStr.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte tmp[] = mdTemp.digest(); // MD5 的计算结果是一个 128 位的长整数,
// 用字节表示就是 16 个字节
char strs[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,
// 所以表示成 16 进制需要 32 个字符
int k = 0; // 表示转换结果中对应的字符位置
for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节
// 转换成 16 进制字符的转换
byte byte0 = tmp[i]; // 取第 i 个字节
strs[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,
// >>> 为逻辑右移,将符号位一起右移
strs[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
}
return new String(strs).toUpperCase(); // 换后的结果转换为字符串
} catch (Exception e) {
return null;
}
}
}

  这里byte0>>>4&0xf,很多小白不太清楚

0x:十六进制

0xf:十六进制f     //二进制就是1111

byte0总共8位,所以右移四位就是取前四位,换成19进制的字符。

值得提醒的一件事是,MD5算法可以解密,只是不同的初始加密数据,解密的时间范围很大。快的(如纯数字加密)几毫秒就可以完成,慢的(如存在特殊字符)需要几百年才能解密。

md5加密解析的更多相关文章

  1. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

  2. [开源]用MQL4实现MD5加密

    本文转载自博客园:混沌的世界 原文地址:http://www.cnblogs.com/niniwzw/archive/2009/12/05/1617685.html 在用MQL4进行金融交易的时候,经 ...

  3. linux md5 加密字符串和文件方法

    linux md5 加密字符串和文件方法 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改.MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意 ...

  4. Linux下使用MD5加密BASE64加密

    这里以字符串123456为例子,它的md5密文值为:e10adc3949ba59abbe56e057f20f883e 这里以1.txt为需要被加密的文件. 一. 用oppnssl md5 加密字符串和 ...

  5. .Net Core Md5加密整理

    一..Net Core中Md5使用说明 .Net Core中自带Md5加密处理,使用方法和 .Net Framework中相同 所在命名空间 using System.Security.Cryptog ...

  6. 对中文进行MD5加密的注意事项(Java版,编码问题)

    http://blog.csdn.net/tongdao/article/details/20690187 在工作中需要和第三方进行Http通信,在通信内容中有几个参数涉及到了中文.自己在进行MD5加 ...

  7. MD5—加密,加盐

    MD5的参考盐值:String salt = "212*)()()**()^&UYGbakdkj " ; MD5—加密工具类 package com.demo.tools; ...

  8. IOS-网络(数据安全:MD5加密)

    // // ViewController.m // IOS_0129_HTTP请求 // // Created by ma c on 16/1/29. // Copyright © 2016年 博文科 ...

  9. 01.MD5加密

    namespace _01.MD5加密 { class Program { static void Main(string[] args) { //MD5加密就是给想要的密码或者其它字符加密 //如果 ...

随机推荐

  1. 老李分享: 并行计算基础&编程模型与工具 1

    老李分享: 并行计算基础&编程模型与工具   在当前计算机应用中,对高速并行计算的需求是广泛的,归纳起来,主要有三种类型的应用需求: 计算密集(Computer-Intensive)型应用,如 ...

  2. 老李分享:adb发送的指令都有哪些

    老李分享:adb发送的指令都有哪些   这两天在poptest上课的时候,我们邀请了业内技术牛人为我们的学员讲解手机自动化方面的知识,每天大家都很踊跃,要学习到晚上11点多才能,有的学员跟我说都累傻了 ...

  3. Android线程池使用终结版

    有一段时间没写博文了,今天抽空总结一下,也希望能通过自己写的这些文章,加深理解的同时能帮 助在技术方面有疑点的朋友搞清楚个所以然来,由于经常会在网上或群里看到有朋友会问线程方面的 东西,就像我一个朋友 ...

  4. javascript执行顺序小结

    作为web开发人员,一定要对js的执行顺序,解析原理有一定了解,否则无法掌控这门小巧好用的语言 javascript是一门实现网页动态效果的语言,也是主要负责和服务端的交互,他抛弃了像java中类的束 ...

  5. Activity间传递数据

     1.从当前的Activity传递数据到下一个Activity: (1)发送方(当前的Activity): Bundle bundle = new Bundle(); bundle.putString ...

  6. 搭建MySQL高可用负载均衡集群

    1.简介 使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.这一结果也不利于软件的推广. 那么如何跨过这个 ...

  7. 使用Dockerfile制作自己的Docker镜像

    一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...

  8. ES6 对let声明的一点思考

    说到ES6的let变量声明,我估计很多人会想起下面几个主要的特点: 没有变量声明提升 拥有块级作用域 暂时死区 不能重复声明 很多教程和总结基本都说到了这几点(说实话大部分文章都大同小异,摘录的居多) ...

  9. Android学习探索之运用MVP设计模式实现项目解耦

    前言: 一直致力于提高开发效率降低项目耦合,今天想抽空学习一下MVP架构设计模式,学习一下如何运用到项目中. MVP架构设计模式 MVP模式是一种架构设计模式,也是一种经典的界面模式.MVP中的M代表 ...

  10. C#Execl

    using System.IO; using System.Text; namespace iLIS.Common { /// <summary> /// 生成Excel文档内容 /// ...