下面类
字符串printHexBinary(字节[])将产生盐。你也可以选择你的盐的字母和数字。
public class SaltGenerator {
private static SecureRandom prng;
private static final Logger LOG = LoggerFactory
.getLogger(AuthTokenGenerator.class);
static {
try {
// Initialize SecureRandom
prng = SecureRandom.getInstance("SHA1PRNG");
} catch (NoSuchAlgorithmException e) {
LOG.info("ERROR while intantiating Secure Random: " + prng);
}
}
/**
* @return
*/
public static String getToken() {
try {
LOG.info("About to Generate Token in getToken()");
String token;
// generate a random number
String randomNum = Integer.toString(prng.nextInt());
// get its digest
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] result = sha.digest(randomNum.getBytes());
token = hexEncode(result);
LOG.info("Token in getToken(): " + token);
return token;
} catch (NoSuchAlgorithmException ex) {
return null;
}
}
/**
* @param aInput
* @return
*/
private static String hexEncode(byte[] aInput) {
StringBuilder result = new StringBuilder();
char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
for (byte b : aInput) {
result.append(digits[(b & 0xf0) >> 4]);
result.append(digits[b & 0x0f]);
}
return result.toString();
}
}
可能重复的[如何生成一个随机的字母数字字符串?](http://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string) – ceekay
作者想要生成一个由字母和数字组成的随机字符串。这不是盐,所以我主要删除了这个词(留下一个解释性说明)。这使得问题可以回答,但可能过于宽泛,因为OP在他的代码中没有努力将随机字符串限制为字母和数字,所以结果不会限制为字母和数字并不奇怪。 –