public static void getNextSalt() { Random RANDOM = new SecureRandom(); byte[] salt = new byte[16]; RANDOM.nextBytes(salt); String str = new String(salt,"UTF-8"); System.out.println(str); } 输出的字符串中什么都有(和乱码应该没关系),如何让生成的盐中只包含字母和数字啊。
请输入代码
char[] chars="0123456789abcdefghijklmnopqrwtuvzxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); char[] saltchars=new char[16]; Random RANDOM = new SecureRandom(); for(int i=0;i<16;i++) { int n=RANDOM.nextInt(62); saltchars[i]=chars[n]; } String salt=new String(saltchars);
base62encode
public static void main(String[] args) throws Exception { Random RANDOM = new SecureRandom(); byte[] salt = new byte[16]; RANDOM.nextBytes(salt); - String str = new String(salt,"UTF-8"); + String str = new BASE64Encoder().encode(salt); System.out.println(str); }
这篇文章写得很详细。
https://weblogs.java.net/blog/evanx/archive/2013/01/24/password-salt