Java 生成必须包含字母、数字和特殊字符(6-10位)的随机字符串

Java 生成必须包含字母、数字和特殊字符(6-10位)的随机字符串,java,scala,random,playframework,passwords,Java,Scala,Random,Playframework,Passwords,我正在生成一个6到10位数的密码 这是我的密码,给我6-10位的随机密码 val AB = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:<=>?@_!#%&()*+,-.~"; val rnd = new Random(); def randomPassword(): String = { val len = rnd.nextInt(5) + 5 val sb = new S

我正在生成一个6到10位数的密码

这是我的密码,给我6-10位的随机密码

val AB = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:<=>?@_!#%&()*+,-.~";
val rnd = new Random();

def randomPassword(): String = {
    val len = rnd.nextInt(5) + 5
    val sb = new StringBuilder(len);
    for (i <- 0 to len)
       sb.append(AB.charAt(rnd.nextInt(AB.length())));
    return sb.toString();
    }
val AB=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz012456789:?@!#%&()*+,-.~”;
val rnd=新随机数();
def randomPassword():字符串={
val len=下一个变量(5)+5
val sb=新的StringBuilder(len);

对于(i首先生成所有字母的随机密码,然后根据需要将部分字母替换为数字/特殊字符

(顺便说一句,我不熟悉Scala,所以我将使用Java的语法,因为我不知道键入的内容是否有效。很抱歉。)

//将源字符串拆分为字母、数字和特殊字符
字符串AB=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz”;
字符串编号=“0123456789”;
String specials=“:?@#%&()*+,-.~”;
字符串随机密码(){
StringBuilder sb=新的StringBuilder();
int len=rnd.nextInt(5)+5;
//首先用字母生成密码。这部分与原始代码相同。

对于(int i=0;i首先生成所有字母的随机密码,然后根据需要将部分字母替换为数字/特殊字符

(顺便说一句,我不熟悉Scala,所以我将使用Java的语法,因为我不知道键入的内容是否有效。很抱歉。)

//将源字符串拆分为字母、数字和特殊字符
字符串AB=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz”;
字符串编号=“0123456789”;
String specials=“:?@#%&()*+,-.~”;
字符串随机密码(){
StringBuilder sb=新的StringBuilder();
int len=rnd.nextInt(5)+5;
//首先用字母生成密码。这部分与原始代码相同。

对于(int i=0;i首先生成所有字母的随机密码,然后根据需要将部分字母替换为数字/特殊字符

(顺便说一句,我不熟悉Scala,所以我将使用Java的语法,因为我不知道键入的内容是否有效。很抱歉。)

//将源字符串拆分为字母、数字和特殊字符
字符串AB=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz”;
字符串编号=“0123456789”;
String specials=“:?@#%&()*+,-.~”;
字符串随机密码(){
StringBuilder sb=新的StringBuilder();
int len=rnd.nextInt(5)+5;
//首先用字母生成密码。这部分与原始代码相同。

对于(int i=0;i首先生成所有字母的随机密码,然后根据需要将部分字母替换为数字/特殊字符

(顺便说一句,我不熟悉Scala,所以我将使用Java的语法,因为我不知道键入的内容是否有效。很抱歉。)

//将源字符串拆分为字母、数字和特殊字符
字符串AB=“abcdefghijklmnopqrstuvxyzabefghijklmnopqrstuvxyz”;
字符串编号=“0123456789”;
String specials=“:?@#%&()*+,-.~”;
字符串随机密码(){
StringBuilder sb=新的StringBuilder();
int len=rnd.nextInt(5)+5;
//首先用字母生成密码。这部分与原始代码相同。
对于(int i=0;i
def randomPassword():字符串={
val len=下一个变量(5)+5
val sb=新的StringBuilder(len);
对于(i
def randomPassword():字符串={
val len=下一个变量(5)+5
val sb=新的StringBuilder(len);
对于(i
def randomPassword():字符串={
val len=下一个变量(5)+5
val sb=新的StringBuilder(len);
对于(i
def randomPassword():字符串={
val len=下一个变量(5)+5
val sb=新的StringBuilder(len);

对于(i您可以应用while循环的原理

  • 将附加的密码存储到变量中
  • 使用while循环检查密码是否不包含数字和/或符号,如果不包含,请再次重新生成密码并将其存储到变量中
  • 当while循环自动中断时,返回变量

  • 您可以应用while循环的原理

  • 将附加的密码存储到变量中
  • 使用while循环检查密码是否不包含数字和/或符号,如果不包含,请再次重新生成密码并将其存储到变量中
  • 当while循环自动中断时,返回变量

  • 您可以应用while循环的原理

  • 将附加的密码存储到变量中
  • 使用while循环检查密码是否不包含数字和/或符号,如果不包含,请再次重新生成密码并将其存储到变量中
  • 当while循环自动中断时,返回变量

  • 您可以应用while循环的原理

  • 将附加的密码存储到变量中
  • 使用while循环检查密码是否不包含数字和/或符号,如果不包含,请再次重新生成密码并将其存储到变量中
  • 当while循环自动中断时,返回变量

  • imho的简单解决方案是(伪代码)


    除非你已经有了最长密码,否则这永远不会减少熵。

    简单的解决方案是(伪代码)


    除非你已经有了最长密码,否则这永远不会减少熵。

    简单的解决方案是(伪代码)


    除非你已经有了最长密码,否则这永远不会减少熵。

    简单的解决方案是(伪代码)


    这永远不会减少熵,除非你已经有了一个最大长度密码。

    使用不可变的数据结构对scala来说更为惯用

      protected def nextChar(): Char = Random.nextPrintableChar()
    
      def randomString(length: Int = 10): String = {
        (0 until length).map(_ => nextChar()).mkString
      }
    
    编辑: 为了确保字符串中始终有数字、特殊字符和字母,我将分别生成每一类字母,然后在函数中随机连接它们
    def randomPassword(): String = {
        val len = rnd.nextInt(5) + 5
        val sb = new StringBuilder(len);
        for (i <- 0 to len)
           sb.append(AB.charAt(rnd.nextInt(AB.length())));
    
        if(sb.toString is allString or allNum){
           return randomPassword();
        }
        return sb.toString();
        }
    
    generate password
    if no alphabet;
        if not max length;
            add an alphabet
        else
            change last letter with an alphabet
    if no digit;
        if not max length;
            add an digit
        else
            change first letter with an digit
    if no special;
        if not max length;
            add an special
        else
            change second letter with an special
    
      protected def nextChar(): Char = Random.nextPrintableChar()
    
      def randomString(length: Int = 10): String = {
        (0 until length).map(_ => nextChar()).mkString
      }
    
    $length = 45;
    $chars = array_merge(range(0,9), range('a','z'), range('A','Z'));
    shuffle($chars);
    $password = implode(array_slice($chars, 0, $length));
    
    echo "This is the password: ".$password;
    
    This is the password: wmU7KaZoOCIf4qn2tz5E06jiQgHvhR9dyBxrFYAePcDWk
    
    object password {
      import scala.util.Random
      import scala.collection.immutable.Stream
    
    
      private def gen = Random.alphanumeric
    
      def get(len: Int): String = {    
        def build(acc: String, s: Stream[Char]): String = {
          if (s.isEmpty) acc
          else build(acc + s.head, s.tail)
        }
    
        build("", gen take len)
      }
    }
    
    1 to 25 foreach { _ => println(password get 8) }
    
    YBk2UrOV
    GD4eLexS
    l8yxAkp9
    ooQnaRpd
    NgHAruB8
    pMXpi4ad