抽时间写了一个算法工具类,目前支持的算法有SHA1,SHA256,SHA384,SHA512,MD5,同时支持获取文件的MD5值。

使用方法如下:

获取字符串的MD5值

 String str= AlgorithmHelper.getHash("123", AlgorithmHelper.MD5)

获取字符串的SHA256值

  String str= AlgorithmHelper.getHash("123", AlgorithmHelper.SHA256);

获取文件的MD5值

 File file=new File(Environment.getExternalStorageDirectory().getAbsolutePath()+File.separator+"1.jpg");
String str=AlgorithmHelper.getMD5(file);

代码文件如下:

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;
import java.util.HashMap;
import java.util.Map; public class AlgorithmHelper { private final static Map<Integer, String> mapList = new HashMap<Integer, String>();
private final static char[] HEX_CHARS = "0123456789ABCDEF".toCharArray(); public final static int SHA1 = 0;
public final static int SHA256 = 1;
public final static int SHA384 = 2;
public final static int SHA512 = 3;
public final static int MD5 = 4; static {
mapList.put(SHA1, "SHA-1");
mapList.put(SHA256, "SHA-256");
mapList.put(SHA384, "SHA-384");
mapList.put(SHA512, "SHA-512");
mapList.put(MD5, "MD5");
} private static String convertToHex(byte[] bytes) {
char[] hexChars = new char[bytes.length * 2];
for (int j = 0; j < bytes.length; j++) {
int v = bytes[j] & 0xFF;
hexChars[j * 2] = HEX_CHARS[v >>> 4];
hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F];
}
return new String(hexChars);
} public static String getHash(String text, int algorithm) {
String hash = null;
try {
if (mapList.containsKey(algorithm)) {
final MessageDigest digest = MessageDigest.getInstance(mapList.get(algorithm));
final byte[] bytes = text.getBytes("UTF-8");
digest.update(bytes, 0, bytes.length);
hash = convertToHex(digest.digest());
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return hash;
} //获取字符串的MD5值
public static String getMD5(String text) {
return getHash(text, MD5);
} //获取文件的MD5值
public static String getMD5(File file) {
String hash = null;
if (file == null || !file.exists()) {
return hash;
} InputStream is = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
is = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
messageDigest.update(buffer, 0, len);
}
byte[] bytes = messageDigest.digest();
hash = convertToHex(bytes);
} catch (Exception e) {
} finally {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return hash;
}
}

MD5算法工具类的更多相关文章

  1. MD5编码工具类 MD5Code.java

    代码如下: package com.util; /** * MD5编码工具类 * http://www.cnblogs.com/sosoft/ */ public class MD5Code { st ...

  2. android开发MD5加密工具类(一)

    MD5加密工具类整理: package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.secu ...

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

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

  4. java版MD5签名工具类

    package com.net.util; import java.security.MessageDigest; /** * MD5签名工具类 * @author zhangdi * */ publ ...

  5. spring自带的MD5加密工具类

    Spring 自带的md5加密工具类,本来打算自己找一个工具类的,后来想起来Spring有自带的,就翻了翻 //导入包import org.springframework.util.DigestUti ...

  6. Android初级教程:对文件和字符串进行MD5加密工具类

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008   点击打开链接 之前写过一篇博文,是针对字符串进行md5加密的.今 ...

  7. java实现Md5加密工具类

    场景:平常我们用户注册的密码保存到数据库都不会是明文存储的.都是经过加密之后的.因为保证用户的安全性.我们通常是用md5算法来加密的. 这个只能算是一个工具类.没必要了解里面是怎么实现的.拿来用就可以 ...

  8. AES算法工具类

    什么是对称加密算法? AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 对称加密算法安全吗? 看过间谍局的知友们一定知道电台 ...

  9. MD5加密算法工具类

    import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...

随机推荐

  1. Excel复制粘贴假死

    把打印机都删除了试一下. 如果还有问题,就把迅雷监听关掉.

  2. bzoj 2726 任务安排(3)/loj 10184-10186 斜率优化

    任务安排1 #include<bits/stdc++.h> #define int long long using namespace std; ; int n,s,t[N],c[N],f ...

  3. poj2559/hdu1506 单调栈经典题

    我实在是太菜了啊啊啊啊啊 到现在连个单调栈都不会啊啊啊 写个经典题 #include<cstdio> #include<algorithm> #include<cstri ...

  4. C#水晶报表教程

    http://apps.hi.baidu.com/share/detail/24298108 水晶报表是一个功能强大的报表工具,现在已经被Microsoft Visual Studio 2005(下文 ...

  5. Task Asnyc 异常问题

    /// <summary> /// async 异常捕获问题 /// </summary> /// <param name="context"> ...

  6. PHP7语法知识(四):目录文件操作、Cookie与Session、MySQL数据库的使用、Redis数据库、PHP处理XML与JSON

    目录文件操作 一.目录 1.判断文件类型: 2.创建和删除目录: 3.打开读取和关闭目录 4.获得路径中目录部分 5.目录磁盘空间 二.文件操作 1.打开文件: 2.读取文件: 3.获得文件属性: 4 ...

  7. mui列表系列

    详细操作见代码: <!doctype html> <html> <head> <meta charset="UTF-8"> < ...

  8. spring boot 与 spring cloud 关系

    公司使用spring cloud,所以稍微了解一下 看了一下spring官网对 spring boot 以及 spring cloud 的解释 Spring Boot Spring Boot make ...

  9. gulp3 和 gulp4 区别

    运行gulp项目报错:AssertionError: Task function must be specified 今天像往常一样,编写文章,并使用gulp bulid压缩代码,但是一运行:gulp ...

  10. pythonのscrapy抓取网站数据

    (1)安装Scrapy环境 步骤请参考:https://blog.csdn.net/c406495762/article/details/60156205 需要注意的是,安装的时候需要根据自己的pyt ...