用MD5的JAVABEAN实现文件的加密
2008-10-22 09:31
260 查看
/**
*
*/
package text;
/**
* @author Admin
* 用MD5的JAVABEAN实现文件的加密
*/
public class MD5 {
String hex_chr = "0123456789abcdef" ;
public String calcMD5(String str) {
int[] x = str2blks_MD5(str) ;
int a = 0x67452301 ;
int b = 0x67452301 ;
int c = 0xEECDAB89 ;
int d = 0x10325476 ;
for(int i=0 ;i<x.length ;i+=16) {
int olda = a ;
int oldb = b ;
int oldc = c ;
int oldd = d ;
a = this.ff(a, b, c, d, x[i + 0], 7, 0xD76AA478) ;
d = this.ff(d, a, b, c, x[i +1], 12, 0xE8C7B756) ;
c = this.ff(c, d, a, b, x[i +2], 17, 0x242070DB) ;
b = this.ff(b, c, d, a, x[i +3], 22, 0xC1BDCEEE) ;
a = this.ff(a, b, c, d, x[i +4], 7, 0xF57C0FAF) ;
d = this.ff(d, a, b, c, x[i +5], 12, 0x4787C62A) ;
c = this.ff(c, d, a, b, x[i +6], 17, 0xA8304613) ;
b = this.ff(b, c, d, a, x[i +7], 22, 0xFD469501) ;
a = this.ff(a, b, c, d, x[i +8], 7, 0x698098D8) ;
d = this.ff(d, a, b, c, x[i +9], 12, 0x8B44F7AF) ;
c = this.ff(c, d, a, b, x[i +10], 17, 0xFFFF5BB) ;
b = this.ff(b, c, d, a, x[i +11], 22, 0x895CD7BE) ;
a = this.ff(a, b, c, d, x[i +12], 7, 0x6B901122) ;
d = this.ff(d, a, b, c, x[i +13], 12, 0xFD987193) ;
c = this.ff(c, d, a, b, x[i +14], 17, 0xA679438E) ;
b = this.ff(b, c, d, a, x[i +15], 22, 0x49B40821) ;
a = this.gg(a, b, c, d, x[i +1], 5, 0xF61E2562) ;
d = this.gg(d, a, b, c, x[i +6], 9, 0xC040B340) ;
c = this.gg(c, d, a, b, x[i +11], 14, 0x265E5A51) ;
b = this.gg(b, c, d, a, x[i +0], 20, 0xE9B6C7AA) ;
a = this.gg(a, b, c, d, x[i +5], 5, 0xD62F105D) ;
d = this.gg(d, a, b, c, x[i +10], 9, 0x02441453) ;
c = this.gg(c, d, a, b, x[i +15], 14, 0xD8A1E681) ;
b = this.gg(b, c, d, a, x[i +4], 20, 0xE7D3FBC8) ;
a = this.gg(a, b, c, d, x[i +9], 5, 0x21E1CDE6) ;
d = this.gg(d, a, b, c, x[i +14], 9, 0xC33707D6) ;
c = this.gg(c, d, a, b, x[i +3], 14, 0xF4D50D87) ;
b = this.gg(b, c, d, a, x[i +8], 20, 0x455A14ED) ;
a = this.gg(a, b, c, d, x[i +13], 5, 0xA9E3E905) ;
d = this.gg(d, a, b, c, x[i +2], 9, 0xFCEFA3F8) ;
c = this.gg(c, d, a, b, x[i +7], 14, 0x676F02D9) ;
b = this.gg(b, c, d, a, x[i +12], 20, 0x8D2A4C8A) ;
a = this.hh(a, b, c, d, x[i +5], 4, 0xFFFA3942) ;
d = this.hh(d, a, b, c, x[i +8], 11, 0x8771F681) ;
c = this.hh(c, d, a, b, x[i +11], 16, 0x6D9D6122) ;
b = this.hh(b, c, d, a, x[i +14], 23, 0xFDE5380C) ;
a = this.hh(a, b, c, d, x[i +1], 4, 0xA4BEEA44) ;
d = this.hh(d, a, b, c, x[i +4], 11, 0x4BDECFA9) ;
c = this.hh(c, d, a, b, x[i +7], 16, 0xF6BB4B60) ;
b = this.hh(b, c, d, a, x[i +10], 23, 0xBEBFBC70) ;
a = this.hh(a, b, c, d, x[i +13], 4, 0x289B7EC6) ;
d = this.hh(d, a, b, c, x[i +0], 11, 0xEAA127FA) ;
c = this.hh(c, d, a, b, x[i +3], 16, 0xD4EF3085) ;
b = this.hh(b, c, d, a, x[i +6], 23, 0x04881D05) ;
a = this.hh(a, b, c, d, x[i +9], 4, 0xD9D4D039) ;
d = this.hh(d, a, b, c, x[i +12], 11, 0xE6DB99E5) ;
c = this.hh(c, d, a, b, x[i +15], 16, 0x1FA27CF8) ;
b = this.hh(b, c, d, a, x[i +2], 23, 0xC4AC5665) ;
a = this.ii(a, b, c, d, x[i +0], 6, 0xF4292244) ;
d = this.ii(d, a, b, c, x[i +7], 10, 0x432AFF97) ;
c = this.ii(c, d, a, b, x[i +14], 15, 0xAB9423A7) ;
b = this.ii(b, c, d, a, x[i +5], 21, 0xFC93A039) ;
a = this.ii(a, b, c, d, x[i +12], 6, 0x655B59C3) ;
d = this.ii(d, a, b, c, x[i +3], 10, 0x8F0CCC92) ;
c = this.ii(c, d, a, b, x[i +10], 15, 0xFFEF47D) ;
b = this.ii(b, c, d, a, x[i +1], 21, 0x85845DD1) ;
a = this.ii(a, b, c, d, x[i +8], 6, 0x6FA87E4F) ;
d = this.ii(d, a, b, c, x[i +15], 10, 0xFE2CE6E0) ;
c = this.ii(c, d, a, b, x[i +6], 15, 0xA3014314) ;
b = this.ii(b, c, d, a, x[i +13], 21, 0x4E0811A1) ;
a = this.ii(a, b, c, d, x[i +4], 6, 0xF7537E82) ;
d = this.ii(d, a, b, c, x[i +11], 10, 0xBD3AF235) ;
c = this.ii(c, d, a, b, x[i +2], 15, 0x2AD7D2BB) ;
b = this.ii(b, c, d, a, x[i +9], 21, 0xEB86D391) ;
a = this.add(a, olda) ;
b = this.add(b, oldb) ;
c = this.add(c, oldc) ;
d = this.add(d, oldd) ;
}
return rhex(a) + rhex(b) + rhex(c) + rhex(d) ;
}
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) ;
}
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 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 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 cmn(int q,int a, int b,int x,int s, int t) {
return add(rol(rol(add(a,q),add(x,t)),s),b) ;
}
private int rol(int num,int cnt) {
return (num<<cnt) |(num >>>(32 - cnt)) ;
}
private int add(int x,int y) {
return ((x & 0x7FFFFFFF)+(y &0x7FFFFFFF)^(x & 0x80000000)^(y & 0x80000000)) ;
}
private int[] str2blks_MD5(String str) {
int nblk = ((str.length()+8)>>6) + 1 ;
int[] blks = new int[nblk*16] ;
int i = 0 ;
for(i = 0 ;i<nblk*16 ;i++) {
blks[i] = 0 ;
}
for(i = 0;i<str.length();i++) {
blks[i>>2] = str.charAt(i)<<((i%4)*8) ;
}
blks[i>>2] = 0x80<<((i%4)*8) ;
blks[nblk * 16 -2] = str.length()*8 ;
return blks ;
}
private String rhex(int num) {
String str ="" ;
for(int j=0;j<=3;j++) {
str = str +hex_chr.charAt((num>>(j*8 + 4))& 0x0F) + hex_chr.charAt((num>>(j*8 ))& 0x0F);
}
return str ;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MD5 mD5 = new MD5() ;
System.out.println(mD5.calcMD5("你好!")) ;
}
}
*
*/
package text;
/**
* @author Admin
* 用MD5的JAVABEAN实现文件的加密
*/
public class MD5 {
String hex_chr = "0123456789abcdef" ;
public String calcMD5(String str) {
int[] x = str2blks_MD5(str) ;
int a = 0x67452301 ;
int b = 0x67452301 ;
int c = 0xEECDAB89 ;
int d = 0x10325476 ;
for(int i=0 ;i<x.length ;i+=16) {
int olda = a ;
int oldb = b ;
int oldc = c ;
int oldd = d ;
a = this.ff(a, b, c, d, x[i + 0], 7, 0xD76AA478) ;
d = this.ff(d, a, b, c, x[i +1], 12, 0xE8C7B756) ;
c = this.ff(c, d, a, b, x[i +2], 17, 0x242070DB) ;
b = this.ff(b, c, d, a, x[i +3], 22, 0xC1BDCEEE) ;
a = this.ff(a, b, c, d, x[i +4], 7, 0xF57C0FAF) ;
d = this.ff(d, a, b, c, x[i +5], 12, 0x4787C62A) ;
c = this.ff(c, d, a, b, x[i +6], 17, 0xA8304613) ;
b = this.ff(b, c, d, a, x[i +7], 22, 0xFD469501) ;
a = this.ff(a, b, c, d, x[i +8], 7, 0x698098D8) ;
d = this.ff(d, a, b, c, x[i +9], 12, 0x8B44F7AF) ;
c = this.ff(c, d, a, b, x[i +10], 17, 0xFFFF5BB) ;
b = this.ff(b, c, d, a, x[i +11], 22, 0x895CD7BE) ;
a = this.ff(a, b, c, d, x[i +12], 7, 0x6B901122) ;
d = this.ff(d, a, b, c, x[i +13], 12, 0xFD987193) ;
c = this.ff(c, d, a, b, x[i +14], 17, 0xA679438E) ;
b = this.ff(b, c, d, a, x[i +15], 22, 0x49B40821) ;
a = this.gg(a, b, c, d, x[i +1], 5, 0xF61E2562) ;
d = this.gg(d, a, b, c, x[i +6], 9, 0xC040B340) ;
c = this.gg(c, d, a, b, x[i +11], 14, 0x265E5A51) ;
b = this.gg(b, c, d, a, x[i +0], 20, 0xE9B6C7AA) ;
a = this.gg(a, b, c, d, x[i +5], 5, 0xD62F105D) ;
d = this.gg(d, a, b, c, x[i +10], 9, 0x02441453) ;
c = this.gg(c, d, a, b, x[i +15], 14, 0xD8A1E681) ;
b = this.gg(b, c, d, a, x[i +4], 20, 0xE7D3FBC8) ;
a = this.gg(a, b, c, d, x[i +9], 5, 0x21E1CDE6) ;
d = this.gg(d, a, b, c, x[i +14], 9, 0xC33707D6) ;
c = this.gg(c, d, a, b, x[i +3], 14, 0xF4D50D87) ;
b = this.gg(b, c, d, a, x[i +8], 20, 0x455A14ED) ;
a = this.gg(a, b, c, d, x[i +13], 5, 0xA9E3E905) ;
d = this.gg(d, a, b, c, x[i +2], 9, 0xFCEFA3F8) ;
c = this.gg(c, d, a, b, x[i +7], 14, 0x676F02D9) ;
b = this.gg(b, c, d, a, x[i +12], 20, 0x8D2A4C8A) ;
a = this.hh(a, b, c, d, x[i +5], 4, 0xFFFA3942) ;
d = this.hh(d, a, b, c, x[i +8], 11, 0x8771F681) ;
c = this.hh(c, d, a, b, x[i +11], 16, 0x6D9D6122) ;
b = this.hh(b, c, d, a, x[i +14], 23, 0xFDE5380C) ;
a = this.hh(a, b, c, d, x[i +1], 4, 0xA4BEEA44) ;
d = this.hh(d, a, b, c, x[i +4], 11, 0x4BDECFA9) ;
c = this.hh(c, d, a, b, x[i +7], 16, 0xF6BB4B60) ;
b = this.hh(b, c, d, a, x[i +10], 23, 0xBEBFBC70) ;
a = this.hh(a, b, c, d, x[i +13], 4, 0x289B7EC6) ;
d = this.hh(d, a, b, c, x[i +0], 11, 0xEAA127FA) ;
c = this.hh(c, d, a, b, x[i +3], 16, 0xD4EF3085) ;
b = this.hh(b, c, d, a, x[i +6], 23, 0x04881D05) ;
a = this.hh(a, b, c, d, x[i +9], 4, 0xD9D4D039) ;
d = this.hh(d, a, b, c, x[i +12], 11, 0xE6DB99E5) ;
c = this.hh(c, d, a, b, x[i +15], 16, 0x1FA27CF8) ;
b = this.hh(b, c, d, a, x[i +2], 23, 0xC4AC5665) ;
a = this.ii(a, b, c, d, x[i +0], 6, 0xF4292244) ;
d = this.ii(d, a, b, c, x[i +7], 10, 0x432AFF97) ;
c = this.ii(c, d, a, b, x[i +14], 15, 0xAB9423A7) ;
b = this.ii(b, c, d, a, x[i +5], 21, 0xFC93A039) ;
a = this.ii(a, b, c, d, x[i +12], 6, 0x655B59C3) ;
d = this.ii(d, a, b, c, x[i +3], 10, 0x8F0CCC92) ;
c = this.ii(c, d, a, b, x[i +10], 15, 0xFFEF47D) ;
b = this.ii(b, c, d, a, x[i +1], 21, 0x85845DD1) ;
a = this.ii(a, b, c, d, x[i +8], 6, 0x6FA87E4F) ;
d = this.ii(d, a, b, c, x[i +15], 10, 0xFE2CE6E0) ;
c = this.ii(c, d, a, b, x[i +6], 15, 0xA3014314) ;
b = this.ii(b, c, d, a, x[i +13], 21, 0x4E0811A1) ;
a = this.ii(a, b, c, d, x[i +4], 6, 0xF7537E82) ;
d = this.ii(d, a, b, c, x[i +11], 10, 0xBD3AF235) ;
c = this.ii(c, d, a, b, x[i +2], 15, 0x2AD7D2BB) ;
b = this.ii(b, c, d, a, x[i +9], 21, 0xEB86D391) ;
a = this.add(a, olda) ;
b = this.add(b, oldb) ;
c = this.add(c, oldc) ;
d = this.add(d, oldd) ;
}
return rhex(a) + rhex(b) + rhex(c) + rhex(d) ;
}
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) ;
}
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 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 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 cmn(int q,int a, int b,int x,int s, int t) {
return add(rol(rol(add(a,q),add(x,t)),s),b) ;
}
private int rol(int num,int cnt) {
return (num<<cnt) |(num >>>(32 - cnt)) ;
}
private int add(int x,int y) {
return ((x & 0x7FFFFFFF)+(y &0x7FFFFFFF)^(x & 0x80000000)^(y & 0x80000000)) ;
}
private int[] str2blks_MD5(String str) {
int nblk = ((str.length()+8)>>6) + 1 ;
int[] blks = new int[nblk*16] ;
int i = 0 ;
for(i = 0 ;i<nblk*16 ;i++) {
blks[i] = 0 ;
}
for(i = 0;i<str.length();i++) {
blks[i>>2] = str.charAt(i)<<((i%4)*8) ;
}
blks[i>>2] = 0x80<<((i%4)*8) ;
blks[nblk * 16 -2] = str.length()*8 ;
return blks ;
}
private String rhex(int num) {
String str ="" ;
for(int j=0;j<=3;j++) {
str = str +hex_chr.charAt((num>>(j*8 + 4))& 0x0F) + hex_chr.charAt((num>>(j*8 ))& 0x0F);
}
return str ;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MD5 mD5 = new MD5() ;
System.out.println(mD5.calcMD5("你好!")) ;
}
}
相关文章推荐
- (java)MD5实现文件的加密解密
- c#大圣之路笔记——MD5实现字符串、文件加密
- JAVA实现文件AES加密或MD5验证
- Md5加密原理及其实现算法
- 在Java中使用MessageDigest实现MD5,SHA-1等加密
- Java实现文件的加密与解密
- MD5原理及加密字符串和文件
- MD5原理及加密字符串和文件
- 文件加密之异或加密(C++实现)
- 浅谈C#加密中MD5和SHA1加密实现
- [置顶] JAVA项目三:JAVA实现MD5文件校验
- MD5实现加密 java
- 用SHA1或MD5 算法加密数据(示例:对用户身份验证的简单实现)
- MD5实现32位加密
- 使用java自带des加密算法实现文件加密和字符串加密
- MD5 JAVA用户密码加密实现
- C# 实现MD5加密处理 MD5 加密
- SQL定时自动备份,并将备份文件加密压缩并自动下载的实现
- SQLCipher实现ios平台sqlite数据库文件加密
- 20110625 AD下DFS实现冗余文件服务器,加密软件等