Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* BytesUtils.java
*
* Created on 2 de Dezembro de 2002, 0:24
*/
package jomm.utils;
import java.io.*;
import java.math.BigInteger;
import java.rmi.dgc.VMID;
import java.security.*;
import java.util.Random;
import org.apache.log4j.Logger;
/**
*
* @author Jorge Machado
*/
public class BytesUtils
{
private static int counter =
0;
private static 1.5.0/docs/api/java/util/Random.html">Random random =
new 1.5.0/docs/api/java/util/Random.html">Random();
private static 1.5.0/docs/api/java/rmi/dgc/VMID.html">VMID vmid =
new 1.5.0/docs/api/java/rmi/dgc/VMID.html">VMID();
private static 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(BytesUtils.
class);
/** Private Constructor */
private BytesUtils
() {}
public static 1.5.0/docs/api/java/lang/String.html">String getMd5FromFile
(1.5.0/docs/api/java/lang/String.html">String filepath
)
{
return getMD5
(getBytes
(filepath
));
}
public static byte[] getBytes
(1.5.0/docs/api/java/lang/String.html">String fileName
)
{
byte[] data =
null;
try{
1.5.0/docs/api/java/io/FileInputStream.html">FileInputStream r =
new 1.5.0/docs/api/java/io/FileInputStream.html">FileInputStream(fileName
);
1.5.0/docs/api/java/io/File.html">File f =
new 1.5.0/docs/api/java/io/File.html">File(fileName
);
//this value is never bigger than a integer
int len =
(int) f.
length();
data =
new byte[len
];
int bytesRead =
0;
bytesRead = r.
read(data
);
r.
close();
if(bytesRead == -1
)
return null;
}
catch(1.5.0/docs/api/java/io/FileNotFoundException.html">FileNotFoundException e
)
{
logger.
error("Files getBytes()",e
);
return null;
}
catch(1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
error("Files getData()",e
);
return null;
}
return data
;
}
public static 1.5.0/docs/api/java/lang/String.html">String getMD5
(1.5.0/docs/api/java/lang/String.html">String data
)
{
return getMD5
(data.
getBytes());
}
public static 1.5.0/docs/api/java/lang/String.html">String getMD5
(byte[] data
)
{
return toHex
(getMD5Bytes
(data
));
}
public static 1.5.0/docs/api/java/lang/String.html">String getDigestMD5Hex
(1.5.0/docs/api/java/lang/String.html">String str
){
byte[] digest = getDigestMD5
(str.
getBytes());
if(digest
!=
null)
return toHex
(digest
);
return null;
}
public static byte[] getDigestMD5
(byte[] data
)
{
byte[] result =
null;
try{
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest md5 =
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest.
getInstance("MD5");
md5.
update(data
);
result = md5.
digest();
}
catch(1.5.0/docs/api/java/security/NoSuchAlgorithmException.html">NoSuchAlgorithmException e
)
{
//this never hapens beacause MD5 is a correct algoritm
logger.
fatal("MD5 function does not exists",e
);
}
return result
;
}
/*********************************************************
*Returns true if the two digests are equal
*
*******************************************************/
public static boolean isDigestEqual
(byte[] b1,
byte[] b2
)
{
try{
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest md5 =
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest.
getInstance("MD5");
return md5.
isEqual(b1,b2
);
}
catch(1.5.0/docs/api/java/security/NoSuchAlgorithmException.html">NoSuchAlgorithmException e
)
{
//this never hapens beacause MD5 is a correct algoritm
logger.
fatal("MD5 function does not exists",e
);
}
return false;
}
public static byte[] getMD5Bytes
(byte[] data
)
{
try
{
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest digest =
1.5.0/docs/api/java/security/MessageDigest.html">MessageDigest.
getInstance("MD5");
return digest.
digest(data
);
}
catch (1.5.0/docs/api/java/security/NoSuchAlgorithmException.html">NoSuchAlgorithmException e
)
{
logger.
fatal("MD5 function does not exists",e
);
}
return null;
}
/**
* Return a hex representation of the byte array
*
* @param data The data to transform.
* @return A hex representation of the data.
*/
public static 1.5.0/docs/api/java/lang/String.html">String toHex
(byte[] data
)
{
if ((data ==
null) ||
(data.
length == 0
))
return null;
1.5.0/docs/api/java/lang/StringBuffer.html">StringBuffer result =
new 1.5.0/docs/api/java/lang/StringBuffer.html">StringBuffer();
// This is far from the most efficient way to do things...
for (int i =
0; i
< data.
length; i++
)
{
int low =
(int) (data
[i
] & 0x0F
);
int high =
(int) (data
[i
] & 0xF0
);
result.
append(1.5.0/docs/api/java/lang/Integer.html">Integer.
toHexString(high
).
substring(0, 1
));
result.
append(1.5.0/docs/api/java/lang/Integer.html">Integer.
toHexString(low
));
}
return result.
toString();
}
/**
* Generate a unique key.
* The key is a long (length 38 to 40) sequence of digits.
*
* @return A unique key as a long sequence of base-10 digits.
*/
public static 1.5.0/docs/api/java/lang/String.html">String generateKey
()
{
return new 1.5.0/docs/api/java/math/BigInteger.html">BigInteger(generateBytesKey
()).
abs().
toString();
}
/**
* Generate a unique key.
* The key is a 32-character long sequence of hex digits.
*
* @return A unique key as a long sequence of hex digits.
*/
public static 1.5.0/docs/api/java/lang/String.html">String generateHexKey
()
{
return toHex
(generateBytesKey
());
}
/**
* Generate a unique key as a byte array.
*
* @return A unique key as a byte array.
*/
public static synchronized byte[] generateBytesKey
()
{
byte[] junk =
new byte[16
];
random.
nextBytes(junk
);
1.5.0/docs/api/java/lang/String.html">String input =
new 1.5.0/docs/api/java/lang/StringBuffer.html">StringBuffer().
append(vmid
).
append(new java.
util.
5+0%2Fdocs%2Fapi+Date">Date()).
append(junk
).
append(counter++
).
toString();
return getMD5Bytes
(input.
getBytes());
}
// The following two methods are taken from the Jakarta IOUtil class.
/**
* Copy stream-data from source to destination. This method does not
* buffer, flush or close the streams, as to do so would require making
* non-portable assumptions about the streams' origin and further use. If
* you wish to perform a buffered copy, use {@link #bufferedCopy}.
*
* @param input The InputStream to obtain data from.
* @param output The OutputStream to copy data to.
*/
public static void copy
( final 5+0%2Fdocs%2Fapi+InputStream">InputStream input,
final 5+0%2Fdocs%2Fapi+OutputStream">OutputStream output
)
throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
final int BUFFER_SIZE = 1024
* 4;
final byte[] buffer =
new byte[ BUFFER_SIZE
];
while( true )
{
final int count = input.
read( buffer, 0, BUFFER_SIZE
);
if( -1 == count
) break;
// write out those same bytes
output.
write( buffer, 0, count
);
}
//needed to flush cache
//output.flush();
}
public static void bufferedCopy
( final 5+0%2Fdocs%2Fapi+InputStream">InputStream source,
final 5+0%2Fdocs%2Fapi+OutputStream">OutputStream destination
)
throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
final 1.5.0/docs/api/java/io/BufferedInputStream.html">BufferedInputStream input =
new 1.5.0/docs/api/java/io/BufferedInputStream.html">BufferedInputStream( source
);
final 1.5.0/docs/api/java/io/BufferedOutputStream.html">BufferedOutputStream output =
new 1.5.0/docs/api/java/io/BufferedOutputStream.html">BufferedOutputStream( destination
);
copy
( input, output
);
output.
flush();
}
}