java

位置:IT落伍者 >> java >> 浏览文章

md5算法的java源代码


发布日期:2019年05月15日
 
md5算法的java源代码

public class MD

{

/*

* A Java implementation of the RSA Data Security Inc MD Message

* Digest Algorithm as defined in RFC

* Based on the JavaScript implementation of Paul Johnston

* Copyright (C) Paul Johnston

* See  for details

* Java Version by Thomas Weber (Orange Interactive GmbH)

*/

/*

* Convert a bit number to a hex string with lsbyte first

*/

String hex_chr = abcdef;

private String rhex(int num)

{

String str = ;

for(int j = ; j <= 3; j++)

str = str + hex_chr.charAt((num >> (j * + )) & xF) + hex_chrcharAt((num >> (j * )) & xF);

return str;

}

/*

* Convert a string to a sequence of word blocks stored as an array

* Append padding bits and the length as described in the MD standard

*/

private int[] strblks_MD(String str)

{

int nblk = ((strlength() + ) >> ) + ;

int[] blks = new int[nblk * ];

int i = ;

for(i = ; i < nblk * ; i++) {

blks[i] = ;

}

for(i = ; i < strlength(); i++) {

blks[i >> ] |= strcharAt(i) << ((i % ) * );

}

blks[i >> ] |= x << ((i % ) * );

blks[nblk * ] = strlength()*;

return blks;

}

/*

* Add integers wrapping at ^

*/

private int add(int x int y)

{

return ((x&xFFFFFFF) + (y&xFFFFFFF)) ^ (x&x) ^ (y&x);

}

/*

* Bitwise rotate a bit number to the left

*/

private int rol(int num int cnt)

{

return (num << cnt) | (num >>> ( cnt));

}

/*

* These functions implement the basic operation for each round of the

* algorithm

*/

private int cmn(int q int a int b int x int s int t)

{

return add(rol(add(add(a q) add(x t)) s) b);

}

private int ff(int a int b int c int d int x int s int t)

{

return cmn((b & c) | ((~b) & d) a b x s t);

}

private int gg(int a int b int c int d int x int s int t)

{

return cmn((b & d) | (c & (~d)) a b x s t);

}

private int hh(int a int b int c int d int x int s int t)

{

return cmn(b ^ c ^ d a b x s t);

}

private int ii(int a int b int c int d int x int s int t)

{

return cmn(c ^ (b | (~d)) a b x s t);

}

/*

* Take a string and return the hex representation of its MD

*/

public String calcMD(String str)

{

int[] x = strblks_MD(str);

int a = x;

int b = xEFCDAB;

int c = xBADCFE;

int d = x;

for(int i = ; i < xlength; i += )

{

int olda = a;

int oldb = b;

int oldc = c;

int oldd = d;

a = ff(a b c d x[i+ ] xDAA);

d = ff(d a b c x[i+ ] xECB);

c = ff(c d a b x[i+ ] xDB);

b = ff(b c d a x[i+ ] xCBDCEEE);

a = ff(a b c d x[i+ ] xFCFAF);

d = ff(d a b c x[i+ ] xCA);

c = ff(c d a b x[i+ ] xA);

b = ff(b c d a x[i+ ] xFD);

a = ff(a b c d x[i+ ] xD);

d = ff(d a b c x[i+ ] xBFAF);

c = ff(c d a b x[i+] xFFFFBB);

b = ff(b c d a x[i+] xCDBE);

a = ff(a b c d x[i+] xB);

d = ff(d a b c x[i+] xFD);

c = ff(c d a b x[i+] xAE);

b = ff(b c d a x[i+] xB);

a = gg(a b c d x[i+ ] xFE);

d = gg(d a b c x[i+ ] xCB);

c = gg(c d a b x[i+] xEA);

b = gg(b c d a x[i+ ] xEBCAA);

a = gg(a b c d x[i+ ] xDFD);

d = gg(d a b c x[i+] x);

c = gg(c d a b x[i+] xDAE);

b = gg(b c d a x[i+ ] xEDFBC);

a = gg(a b c d x[i+ ] xECDE);

d = gg(d a b c x[i+] xCD);

c = gg(c d a b x[i+ ] xFDD);

b = gg(b c d a x[i+ ] xAED);

a = gg(a b c d x[i+] xAEE);

d = gg(d a b c x[i+ ] xFCEFAF);

c = gg(c d a b x[i+ ] xFD);

b = gg(b c d a x[i+] xDACA);

a = hh(a b c d x[i+ ] xFFFA);

d = hh(d a b c x[i+ ] xF);

c = hh(c d a b x[i+] xDD);

b = hh(b c d a x[i+] xFDEC);

a = hh(a b c d x[i+ ] xABEEA);

d = hh(d a b c x[i+ ] xBDECFA);

c = hh(c d a b x[i+ ] xFBBB);

b = hh(b c d a x[i+] xBEBFBC);

a = hh(a b c d x[i+] xBEC);

d = hh(d a b c x[i+ ] xEAAFA);

c = hh(c d a b x[i+ ] xDEF);

b = hh(b c d a x[i+ ] xD);

a = hh(a b c d x[i+ ] xDDD);

d = hh(d a b c x[i+] xEDBE);

c = hh(c d a b x[i+] xFACF);

b = hh(b c d a x[i+ ] xCAC);

a = ii(a b c d x[i+ ] xF);

d = ii(d a b c x[i+ ] xAFF);

c = ii(c d a b x[i+] xABA);

b = ii(b c d a x[i+ ] xFCA);

a = ii(a b c d x[i+] xBC);

d = ii(d a b c x[i+ ] xFCCC);

c = ii(c d a b x[i+] xFFEFFD);

b = ii(b c d a x[i+ ] xDD);

a = ii(a b c d x[i+ ] xFAEF);

d = ii(d a b c x[i+] xFECEE);

c = ii(c d a b x[i+ ] xA);

b = ii(b c d a x[i+] xEA);

a = ii(a b c d x[i+ ] xFE);

d = ii(d a b c x[i+] xBDAF);

c = ii(c d a b x[i+ ] xADDBB);

b = ii(b c d a x[i+ ] xEBD);

a = add(a olda);

b = add(b oldb);

c = add(c oldc);

d = add(d oldd);

}

return rhex(a) + rhex(b) + rhex(c) + rhex(d);

}

}

另: 一中国人写的md 的javabean:

/************************************************

MD 算法的Java Bean

@author:Topcat Tuppin

Last Modified:Mar

*************************************************/

//package beartool;

import javalangreflect*;

/*************************************************

md 类实现了RSA Data Security Inc在提交给IETF

的RFC中的MD messagedigest 算法

*************************************************/

public class MD {

/* 下面这些SS实际上是一个*的矩阵在原始的C实现中是用#define 实现的

这里把它们实现成为static final是表示了只读切能在同一个进程空间内的多个

Instance间共享*/

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S = ;

static final int S               

上一篇:java 开发:WebClient,获取互联网资源

下一篇:DBSCAN算法的Java实现