package info.ozkan.vipera.views.device;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.lang3.RandomStringUtils;
/**
* Parola üreten utility sınıfı
*
* @author Ömer Özkan
*
*/
public final class PasswordGenerator {
private static final String ALGORITHM = "MD5";
private static final String CHARSET = "utf-8";
/**
* Parola boyutu
*/
private static final int SIZE = 16;
/**
* private constructor
*/
private PasswordGenerator() {
}
/**
* Yeni bir parola üretir
*
* @return
*/
public static String generate() {
return RandomStringUtils.random(SIZE, true, true);
}
public static String generate(final String uniqueString) {
String str;
try {
String generated = generate();
generated += uniqueString;
MessageDigest md;
md = MessageDigest.getInstance(ALGORITHM);
byte[] md5 = new byte[54];
md.update(generated.getBytes(CHARSET), 0, generated.length());
md5 = md.digest();
str = convertedToHex(md5);
} catch (final NoSuchAlgorithmException e) {
str = generate();
} catch (final UnsupportedEncodingException e) {
str = generate();
}
return str.substring(SIZE);
}
private static String convertedToHex(final byte[] data) {
final StringBuffer buf = new StringBuffer();
for (int i = 0; i < data.length; i++) {
int halfOfByte = (data[i] >>> 4) & 0x0F;
int twoHalfBytes = 0;
do {
if ((0 <= halfOfByte) && (halfOfByte <= 9)) {
buf.append((char) ('0' + halfOfByte));
}
else {
buf.append((char) ('a' + (halfOfByte - 10)));
}
halfOfByte = data[i] & 0x0F;
} while (twoHalfBytes++ < 1);
}
return buf.toString();
}
}