抽时间写了一个算法工具类,目前支持的算法有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算法工具类的更多相关文章
-
MD5编码工具类 MD5Code.java
代码如下: package com.util; /** * MD5编码工具类 * http://www.cnblogs.com/sosoft/ */ public class MD5Code { st ...
-
android开发MD5加密工具类(一)
MD5加密工具类整理: package com.gzcivil.utils; import java.io.UnsupportedEncodingException; import java.secu ...
-
wemall app商城源码android开发MD5加密工具类
wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享android开发MD5加密工具类主要代码,供 ...
-
java版MD5签名工具类
package com.net.util; import java.security.MessageDigest; /** * MD5签名工具类 * @author zhangdi * */ publ ...
-
spring自带的MD5加密工具类
Spring 自带的md5加密工具类,本来打算自己找一个工具类的,后来想起来Spring有自带的,就翻了翻 //导入包import org.springframework.util.DigestUti ...
-
Android初级教程:对文件和字符串进行MD5加密工具类
转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/52200008 点击打开链接 之前写过一篇博文,是针对字符串进行md5加密的.今 ...
-
java实现Md5加密工具类
场景:平常我们用户注册的密码保存到数据库都不会是明文存储的.都是经过加密之后的.因为保证用户的安全性.我们通常是用md5算法来加密的. 这个只能算是一个工具类.没必要了解里面是怎么实现的.拿来用就可以 ...
-
AES算法工具类
什么是对称加密算法? AES已经变成目前对称加密中最流行算法之一:AES可以使用128.192.和256位密钥,并且用128位分组加密和解密数据. 对称加密算法安全吗? 看过间谍局的知友们一定知道电台 ...
-
MD5加密算法工具类
import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorith ...
随机推荐
-
【转】Eclipse快捷键 10个最有用的快捷键
转载地址:http://www.open-open.com/bbs/view/1320934157953 Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但 ...
-
PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)
主讲人 网神 (新浪微博:@豆角茄子麻酱凉面) 网神(66707180) 18:55:06 那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题.今天的第5章神经网络的内 ...
-
关于jsp页面加载时报错500的问题
先说一下,问题的发生,个人做了个小系统,成品以后运行了几次,没有问题,结果最后一次测试时,发现登陆页面报错了: 账号密码输入正确,经过后台登陆后,按理说是应该进入登陆成功后的jsp页面,然而结果却是: ...
-
hdu5635 BestCoder Round #74 (div.2)
LCP Array Accepts: 131 Submissions: 1352 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 13 ...
-
excel支持正则表达式提取字符函数(支持RegExp捕获分组)
一.要让excel脚本支持Microsoft VBScript Regular Expressions 5.5 ,按快捷键alt+F11,出现下图界面,操作如图示: 二.添加VBA代码: 代码添加完毕 ...
-
MySQL随记(二)
第一范式(1NF First Normal Format): 1. 列具有原子性(atomic) 原子(atom)是物质的最小单元, 它不能被再分割为更小的元素. 2. 表具有主键(Primary K ...
-
{MySQL的逻辑查询语句的执行顺序}一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析
MySQL的逻辑查询语句的执行顺序 阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SEL ...
-
C++二进制字符串转Base64字符串 Base64字符串转二进制字符串
封装成类的 . base64格式的字符串,只包含大小写字母.零到九,以及 + / //___base_64.h /*base_64.h文件*/ #ifndef BASE_64_H #define BA ...
-
Java直接内存与非直接内存性能测试
什么是直接内存与非直接内存 根据官方文档的描述: A byte buffer is either direct or non-direct. Given a direct byte buffer, t ...
-
[BZOJ3309]DZY Loves Math(莫比乌斯反演+线性筛)
$\sum\limits_{T=1}^{n}\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d|T}f(d)\mu(\fr ...