/**
* @author gongchaobin
*
* MD5加密
*
* @version 2013-8-22
*/
public class MD5Util {
// 用来将字节转换成 16 进制表示的字符
static char hexDigits[] = { '', '', '', '', '', '', '', '', '',
'', 'a', 'b', 'c', 'd', 'e', 'f' }; public static String getFileMD5(InputStream fis) {
MessageDigest md = null;
byte[] buffer = new byte[];
int length = -;
long s = System.currentTimeMillis();
try {
md = MessageDigest.getInstance("MD5");
while ((length = fis.read(buffer)) != -) {
md.update(buffer, , length);
} System.err.println("last: " + (System.currentTimeMillis() - s));
byte[] b = md.digest();
return byteToHexStringSingle(b);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
} return null;
} /**
* /** 对文件全文生成MD5摘要
*
* @param file
* 要加密的文件
* @return MD5摘要码
* @throws FTPException
*/
public static String getFileMD5(File file) {
try {
return getFileMD5(new FileInputStream(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return null;
} /** */
/**
* 对一段String生成MD5加密信息
*
* @param message
* 要加密的String
* @return 生成的MD5信息
*/
public static String getMD5(String message) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
System.err.println("MD5摘要长度:" + md.getDigestLength());
byte[] b = md.digest(message.getBytes("utf-8"));
return byteToHexStringSingle(b);// byteToHexString(b);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
} @Deprecated
/** */
/**
* 把byte[]数组转换成十六进制字符串表示形式
* @param tmp 要转换的byte[]
* @return 十六进制字符串表示形式
*/
private static String byteToHexString(byte[] tmp) {
String s;
// 用字节表示就是 16 个字节
char str[] = new char[ * ]; // 每个字节用 16 进制表示的话,使用两个字符,
// 所以表示成 16 进制需要 32 个字符
int k = ; // 表示转换结果中对应的字符位置
for (int i = ; i < ; i++) { // 从第一个字节开始,对 MD5 的每一个字节
// 转换成 16 进制字符的转换
byte byte0 = tmp[i]; // 取第 i 个字节
str[k++] = hexDigits[byte0 >>> & 0xf]; // 取字节中高 4 位的数字转换,
// >>> 为逻辑右移,将符号位一起右移
str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换
}
s = new String(str); // 换后的结果转换为字符串
return s;
} /**
* 独立把byte[]数组转换成十六进制字符串表示形式
*
* @author Bill
* @create 2010-2-24 下午03:26:53
* @since
* @param byteArray
* @return
*/
public static String byteToHexStringSingle(byte[] byteArray) {
StringBuffer md5StrBuff = new StringBuffer(); for (int i = ; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == )
md5StrBuff.append("").append(
Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
} return md5StrBuff.toString();
}
}

Android:MD5加密的更多相关文章

  1. android md5加密与rsa加解密实现代码

    import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security. ...

  2. android MD5加密

    public class MD5Uutils {    //MD5加密,32位    public static String MD5(String str) {        MessageDige ...

  3. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  4. android环境下两种md5加密方式

    在平时开发过程中,MD5加密是一个比较常用的算法,最常见的使用场景就是在帐号注册时,用户输入的密码经md5加密后,传输至服务器保存起来.虽然md5加密经常用,但是md5的加密原理我还真说不上来,对md ...

  5. Android DES AES MD5加密

    AES加密: <span style="font-size:18px;">package com.example.encrypdate.util; import jav ...

  6. wemall app商城源码android开发MD5加密工具类

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...

  7. Android和IOS等效MD5加密

    最近在Android和IOS上都需要对用户的某些输入进行简单的加密,于是采用MD5加密方式. 首先将目的字符串加密一次,获得32位字符串 然后将32位字符串拆为2段,分别加密1次 最后将加密后的2段拼 ...

  8. Android 手机卫士--md5加密过程

    在之前的文章中,我们将用户的密码使用SharedPreferences存储,我们打开/data/data/com.wuyudong.mobilesafe/shared_prefs文件夹下的 confi ...

  9. [android] 手机卫士保存密码时进行md5加密

    一般的手机没有root权限,进不去data/data目录,当手机刷机了后,拥有root权限,就可以进入data/data目录,查看我们保存的密码文件,因此我们需要对存入的密码进行MD5加密 获取Mes ...

  10. Android开发之MD5加密

    将字符串进行MD5加密,返回加密后的字符串 public static String encode(String password) { try { StringBuffer sb = new Str ...

随机推荐

  1. SQL Server高级内容之表表达式和复习

    1. 表表达式 (1) 将表作为一个源或将查询的一个结果集作为一个源,对源做处理,然后得到一个新的数据源,对其进行查询.  (2)表表达式放在from子句中 (3)派生表,将表的查询得到的结果集作为一 ...

  2. hibernate设置mysql的timestamp默认值技巧

    首先,要想使用数据库中配置的默认值就必须不让hibernate覆盖了默认值,需要配置property insert="false" update="false" ...

  3. 如何入侵Linux操作系统

    我发现了一个网站,于是常规入侵.很好,它的FINGER开着,于是我编了一个SHELL,aaa帐号试到zzz(by the way,这是我发现的一个网上规律,那就是帐号的长度与口令的强度成正比, 如果一 ...

  4. Asp.net基础知识

    1.[项目结构] 1.1文件后缀: .cs         源文件(程序代码) .csproj      项目文件(管理文件项) .sln         解决方案文件(管理项目) .config   ...

  5. IOS之KVC机制(Object-C篇)

    开发环境:xcode7 一.KVC概述 1.KVC是KeyValueCoding的简称,它是一种可以直接通过类属性的名字来作key,再绑定key的值来访问类属性的机制,而不再通过利用@property ...

  6. SQL日期操作及只获取日期的方法

    datepart()函数的使用                          * datepart()函数可以方便的取到时期中的各个部分*如日期:2006-07--02 18:15:36.513* ...

  7. 检测PC端和移动端的方法总结

    正在苦逼的实习中,昨天公司让做一个页面,涉及到检测终端的问题,如果是手机设备,就跳转到指定的网页上,以前写响应式布局只要用@media screen来实现布局的差异化适应,但是现在不仅仅是布局,还要针 ...

  8. iOS 多态的简单思想

    /** * 多态:多种形态,是对于对象而言的,如果没有继承就没有多态 * * 在代码中体现:就是通过定义父类指针指向子类的对象 * * 好处:在函数或者方法的参数中如果传入的是父类指针,那么实现的时候 ...

  9. 用Objective-C的foundation框架解决表达式求值问题

    主要思想: 本程序分2个类 一个是ExpressionString类,主要用于存储表达式以及对它进行求值.以下是该类中的内容: (NSString *)expString//用于存储要计算的表达式: ...

  10. ECMAScript 6十大特性

    ES6入门 http://es6.ruanyifeng.com/ ES6排名前十的最佳特性列表 Default Parameters(默认参数) in ES6 Template Literals (模 ...