package com.payease.chains.risk.utils;

/**
* md5密码加密工具类
* Created by liuxiaoming on 2017/8/28.
*/
public class MD5 {
static final int S11 = 7; static final int S12 = 12; static final int S13 = 17; static final int S14 = 22; static final int S21 = 5; static final int S22 = 9; static final int S23 = 14; static final int S24 = 20; static final int S31 = 4; static final int S32 = 11; static final int S33 = 16; static final int S34 = 23; static final int S41 = 6; static final int S42 = 10; static final int S43 = 15; static final int S44 = 21; static final byte PADDING[] = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 }; public static long b2iu(byte b) {
return (b >= 0 ? b : b & 0xff);
} public static String byteHEX(byte ib) {
char Digit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char ob[] = new char[2];
ob[0] = Digit[ib >>> 4 & 0xf];
ob[1] = Digit[ib & 0xf];
String s = new String(ob);
return s;
} public static String encode(String s) {
MD5 m = new MD5();
return m.getMD5ofStr(s);
} private long state[]; private long count[]; private byte buffer[]; public String digestHexStr; private byte digest[]; public MD5() {
state = new long[4];
count = new long[2];
buffer = new byte[64];
digest = new byte[16];
md5Init();
} private void Decode(long output[], byte input[], int len) {
int i = 0;
for (int j = 0; j < len; j += 4) {
output[i] = b2iu(input[j]) | b2iu(input[j + 1]) << 8
| b2iu(input[j + 2]) << 16 | b2iu(input[j + 3]) << 24;
i++;
} } private void Encode(byte output[], long input[], int len) {
int i = 0;
for (int j = 0; j < len; j += 4) {
output[j] = (byte) (int) (input[i] & 255L);
output[j + 1] = (byte) (int) (input[i] >>> 8 & 255L);
output[j + 2] = (byte) (int) (input[i] >>> 16 & 255L);
output[j + 3] = (byte) (int) (input[i] >>> 24 & 255L);
i++;
} } private long F(long x, long y, long z) {
return x & y | (x ^ 0L - 1L) & z;
} private long FF(long a, long b, long c, long d, long x, long s, long ac) {
a += F(b, c, d) + x + ac;
a = (int) a << (int) s | (int) a >>> (int) (32 - s);
a += b;
return a;
} private long G(long x, long y, long z) {
return x & z | y & (z ^ 0L - 1L);
} public String getMD5ofStr(String inbuf) { md5Init(); md5Update(inbuf.getBytes(), inbuf.length());
md5Final();
digestHexStr = "";
for (int i = 0; i < 16; i++)
digestHexStr = String.valueOf(digestHexStr)
+ String.valueOf(byteHEX(digest[i])); return digestHexStr;
} private long GG(long a, long b, long c, long d, long x, long s, long ac) {
a += G(b, c, d) + x + ac;
a = (int) a << (int) s | (int) a >>> (int) (32 - s);
a += b;
return a;
} private long H(long x, long y, long z) {
return x ^ y ^ z;
} private long HH(long a, long b, long c, long d, long x, long s, long ac) {
a += H(b, c, d) + x + ac;
a = (int) a << (int) s | (int) a >>> (int) (32 - s);
a += b;
return a;
} private long I(long x, long y, long z) {
return y ^ (x | z ^ 0L - 1L);
} private long II(long a, long b, long c, long d, long x, long s, long ac) {
a += I(b, c, d) + x + ac;
a = (int) a << (int) s | (int) a >>> (int) (32 - s);
a += b;
return a;
} private void md5Final() {
byte bits[] = new byte[8];
Encode(bits, count, 8);
int index = (int) (count[0] >>> 3) & 0x3f;
int padLen = index >= 56 ? 120 - index : 56 - index;
md5Update(PADDING, padLen);
md5Update(bits, 8);
Encode(digest, state, 16);
} private void md5Init() {
count[0] = 0L;
count[1] = 0L;
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;
} private void md5Memcpy(byte output[], byte input[], int outpos, int inpos,
int len) {
for (int i = 0; i < len; i++)
output[outpos + i] = input[inpos + i]; } private void md5Transform(byte block[]) {
long a = state[0];
long b = state[1];
long c = state[2];
long d = state[3];
long x[] = new long[16];
Decode(x, block, 64);
a = FF(a, b, c, d, x[0], 7L, 0xd76aa478L);
d = FF(d, a, b, c, x[1], 12L, 0xe8c7b756L);
c = FF(c, d, a, b, x[2], 17L, 0x242070dbL);
b = FF(b, c, d, a, x[3], 22L, 0xc1bdceeeL);
a = FF(a, b, c, d, x[4], 7L, 0xf57c0fafL);
d = FF(d, a, b, c, x[5], 12L, 0x4787c62aL);
c = FF(c, d, a, b, x[6], 17L, 0xa8304613L);
b = FF(b, c, d, a, x[7], 22L, 0xfd469501L);
a = FF(a, b, c, d, x[8], 7L, 0x698098d8L);
d = FF(d, a, b, c, x[9], 12L, 0x8b44f7afL);
c = FF(c, d, a, b, x[10], 17L, 0xffff5bb1L);
b = FF(b, c, d, a, x[11], 22L, 0x895cd7beL);
a = FF(a, b, c, d, x[12], 7L, 0x6b901122L);
d = FF(d, a, b, c, x[13], 12L, 0xfd987193L);
c = FF(c, d, a, b, x[14], 17L, 0xa679438eL);
b = FF(b, c, d, a, x[15], 22L, 0x49b40821L);
a = GG(a, b, c, d, x[1], 5L, 0xf61e2562L);
d = GG(d, a, b, c, x[6], 9L, 0xc040b340L);
c = GG(c, d, a, b, x[11], 14L, 0x265e5a51L);
b = GG(b, c, d, a, x[0], 20L, 0xe9b6c7aaL);
a = GG(a, b, c, d, x[5], 5L, 0xd62f105dL);
d = GG(d, a, b, c, x[10], 9L, 0x2441453L);
c = GG(c, d, a, b, x[15], 14L, 0xd8a1e681L);
b = GG(b, c, d, a, x[4], 20L, 0xe7d3fbc8L);
a = GG(a, b, c, d, x[9], 5L, 0x21e1cde6L);
d = GG(d, a, b, c, x[14], 9L, 0xc33707d6L);
c = GG(c, d, a, b, x[3], 14L, 0xf4d50d87L);
b = GG(b, c, d, a, x[8], 20L, 0x455a14edL);
a = GG(a, b, c, d, x[13], 5L, 0xa9e3e905L);
d = GG(d, a, b, c, x[2], 9L, 0xfcefa3f8L);
c = GG(c, d, a, b, x[7], 14L, 0x676f02d9L);
b = GG(b, c, d, a, x[12], 20L, 0x8d2a4c8aL);
a = HH(a, b, c, d, x[5], 4L, 0xfffa3942L);
d = HH(d, a, b, c, x[8], 11L, 0x8771f681L);
c = HH(c, d, a, b, x[11], 16L, 0x6d9d6122L);
b = HH(b, c, d, a, x[14], 23L, 0xfde5380cL);
a = HH(a, b, c, d, x[1], 4L, 0xa4beea44L);
d = HH(d, a, b, c, x[4], 11L, 0x4bdecfa9L);
c = HH(c, d, a, b, x[7], 16L, 0xf6bb4b60L);
b = HH(b, c, d, a, x[10], 23L, 0xbebfbc70L);
a = HH(a, b, c, d, x[13], 4L, 0x289b7ec6L);
d = HH(d, a, b, c, x[0], 11L, 0xeaa127faL);
c = HH(c, d, a, b, x[3], 16L, 0xd4ef3085L);
b = HH(b, c, d, a, x[6], 23L, 0x4881d05L);
a = HH(a, b, c, d, x[9], 4L, 0xd9d4d039L);
d = HH(d, a, b, c, x[12], 11L, 0xe6db99e5L);
c = HH(c, d, a, b, x[15], 16L, 0x1fa27cf8L);
b = HH(b, c, d, a, x[2], 23L, 0xc4ac5665L);
a = II(a, b, c, d, x[0], 6L, 0xf4292244L);
d = II(d, a, b, c, x[7], 10L, 0x432aff97L);
c = II(c, d, a, b, x[14], 15L, 0xab9423a7L);
b = II(b, c, d, a, x[5], 21L, 0xfc93a039L);
a = II(a, b, c, d, x[12], 6L, 0x655b59c3L);
d = II(d, a, b, c, x[3], 10L, 0x8f0ccc92L);
c = II(c, d, a, b, x[10], 15L, 0xffeff47dL);
b = II(b, c, d, a, x[1], 21L, 0x85845dd1L);
a = II(a, b, c, d, x[8], 6L, 0x6fa87e4fL);
d = II(d, a, b, c, x[15], 10L, 0xfe2ce6e0L);
c = II(c, d, a, b, x[6], 15L, 0xa3014314L);
b = II(b, c, d, a, x[13], 21L, 0x4e0811a1L);
a = II(a, b, c, d, x[4], 6L, 0xf7537e82L);
d = II(d, a, b, c, x[11], 10L, 0xbd3af235L);
c = II(c, d, a, b, x[2], 15L, 0x2ad7d2bbL);
b = II(b, c, d, a, x[9], 21L, 0xeb86d391L);
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
} private void md5Update(byte inbuf[], int inputLen) {
byte block[] = new byte[64];
int index = (int) (count[0] >>> 3) & 0x3f;
if ((count[0] += inputLen << 3) < (inputLen << 3))
count[1]++;
count[1] += inputLen >>> 29;
int partLen = 64 - index;
int i;
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
} index = 0;
} else
i = 0;
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}
public static void main(String[] args) {
System.out.println(MD5.encode("1"));
}
}

MD5 工具类的更多相关文章

  1. MD5工具类,提供字符串MD5加密、文件MD5值获取(校验)功能

    MD5工具类,提供字符串MD5加密(校验).文件MD5值获取(校验)功能 : package com.yzu.utils; import java.io.File; import java.io.Fi ...

  2. java MD5工具类

    package com.common.tools; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * @a ...

  3. MD5工具类-详细

    public class MD5Code { /* * 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static * final是表 ...

  4. MD5工具类

    package com.liu.hellomavenweb.util; import java.security.MessageDigest; /** * * @author 刘楠 * */ publ ...

  5. 对指定文件生成数字摘要的MD5工具类

    md5特点:压缩性.不可逆性,经常用于传值过程中的值加密或文件加密static char hexdigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', ...

  6. 170405、java版MD5工具类

    package com.rick.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmExce ...

  7. MD5工具类--可以直接拿来用不抛异常的MD5Util

    public class MD5Util { private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb ...

  8. c# base64及MD5工具类

    using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Lin ...

  9. 我的Java开发学习之旅------>工具类:Java获取字符串和文件进行MD5值

    ps:这几天本人用百度云盘秒传了几部大片到云盘上,几个G的文件瞬秒竟然显示"上传成功"!这真让我目瞪口呆,要是这样的话,那得多快的网速,这绝对是不可能的,也许这仅是个假象.百度了一 ...

随机推荐

  1. redis windows下安装

    1.下载redis windows文件包 下载地址 2.解压文件包 复制压缩包地址 3.进入cmd 命令行 cd进入redis文件包目录 4.执行 redis-server.exe  使用netsta ...

  2. (广搜)可口可乐 -- hdu -- 1495

    链接: http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  3. [转]RTH试用手记之“偶发信号观测”

    年初,罗德与施瓦茨公司(Rohde & Schwarz)推出了第一款的手持示波器,从指标上看,该示波器打破了传统手持器功能简单.指标水平低.结构粗糙的印象,取而代之达到了主流台式数字示波器的性 ...

  4. 转发一篇能看懂的关于ingress的说明

    最近发现好多人问 Ingress,同时一直也没去用 Nginx 的 Ingress,索性鼓捣了一把,发现跟原来确实有了点变化,在这里写篇文章记录一下 https://mritd.me/2017/03/ ...

  5. TSQL--标示列、GUID 、序列

    --1. IDENTIY 列不能为空,不能设默认值,创建后不能使用ALTER TABLE TableName ALTER COLUMN修改,每张表只能有一个自增列--2. 查看当前值:SELECT I ...

  6. Centos7 创建Eclipse启动

    Eclipse是一个集成开发环境(IDE),包含一个基工作区和定制环境的可扩展插件系统.大部分使用 Java 编写,Eclipse 可以用来开发应用程序.通过各种插件,Eclipse 也可以用于其他编 ...

  7. C# Session操作

    Session.Abandon();//清除全部Session//清除某个SessionSession["UserName"] = null;Session.Remove(&quo ...

  8. python的print()输出

    1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: print('1,2,%s,%d'%('asd',4)) 1,2,asd,4 与C语言有点类似 3.其它: ...

  9. AJPFX平台介绍

    AJPFX设立于英国,业务框架扩展到欧洲.美洲和亚洲,在新加坡设有专门的亚洲地区服务部门.AJPFX旨在以极具竞争力的交易成本,也就是银行间市场核心点差和低水平的手续费,使客户在交易中获取最大的利润空 ...

  10. iOS 模拟器网络设置

    在 iOS Simulator 下,点上面菜单栏最左面的苹果标志,第三项 网络设置,然后先最后面一项,网络设置. 然后在网络设置界面下可以开启或关闭网络.