使用子字符串进行随机化

时间:2016-03-27 05:14:24

标签: java

我这里的代码只设法随机化长度,我需要在我的类createPassword中随机化字符串。但是不存在随机化字符串,只有整数的方法。有人有什么建议吗?

主要:

public class Program {
    public static void main(String[] args) {
        PasswordRandomizer randomizer = new PasswordRandomizer(13);
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
        System.out.println("Password: " + randomizer.createPassword());
}
}

班级:

import java.util.Random;

public class PasswordRandomizer {
    private Random random = new Random();
    private int length;

    public PasswordRandomizer(int length) {
        this.length=length;
        random = new Random();
    }

    public String createPassword() {
        String alphabet = "abcdefghijklmnopqrstuvwxyz";
        int randomCharIndex = random.nextInt(length);
        String randomstr = alphabet.substring(randomCharIndex); 
        return randomstr;
    }
}

示例输出:

Password: ghijklmnopqrstuvwxyz
Password: lmnopqrstuvwxyz
Password: jklmnopqrstuvwxyz
Password: ijklmnopqrstuvwxyz

3 个答案:

答案 0 :(得分:2)

这样可以正常工作:

    public String createPassword() {
        StringBuilder pass = new StringBuilder();
        Random r = new Random();

        for(int i = 0 ; i < length ; i++) {
            pass.append( (char)('a' + r.nextInt('z'-'a')) );
        }
        return pass.toString();
    }

我们的想法是利用char可以用作int并转换回char(并且字母字符在ASCII代码中是连续的)。所以你用它来得到一个随机的字符:
 minimumValue + random.nextInt(MaxValue-MinValue)

答案 1 :(得分:0)

您可以使用Collections.shuffle()随机播放列表。你可以使用相同的方法来改变字符串中的字符。看看下面的代码。此代码将在每次执行时返回给定字符串的唯一随机字符串。

    List<String> list = new ArrayList<>(Arrays.asList("abcdefghijklmnopqrstuvwxyz".split("")));
    Collections.shuffle(list);
    String randomString = list.stream().collect(Collectors.joining());  // Java 8

如果你需要的只是一些随机字符,那么为了安全起见,你应该使用某种散列。可能是您可以使用UUID.randomUUID()获取随机值,然后您可以对其进行散列以获得始终唯一的字符串。

答案 2 :(得分:0)

public String getPassword(int no) {
        String inputChars= "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        StringBuilder salt = new StringBuilder();
        Random rnd = new Random();
        while (salt.length() < no) {
            int index = (int) (rnd.nextFloat() * inputChars.length());
            salt.append(inputChars.charAt(index));
        }
        String password= salt.toString();
        return password;

    }

但我建议使用java.security.SecureRandom; e.g。

private SecureRandom random = new SecureRandom();

public String nextSessionId() {
    return new BigInteger(130, random).toString(32);
}

更安全的密码生成方式