10

R でパスワード ジェネレーター関数をコーディングするスマートな方法を探しています。

generate.password (length, capitals, numbers)
  • length: パスワードの長さ
  • 大文字: 大文字が発生する場所を定義するベクトル。ベクトルは、対応するパスワード文字列の位置を反映します。デフォルトでは大文字を使用しないでください。
  • 数値: 大文字が発生する場所を定義するベクトル。ベクトルは、対応するパスワード文字列の位置を反映します。デフォルトは数値ではありません。

例:

generate.password(8)
[1] "hqbfpozr"


generate.password(length=8, capitals=c(2,4))
[1] "hYbFpozr"


generate.password(length=8, capitals=c(2,4), numbers=c(7:8))
[1] "hYbFpo49"
4

3 に答える 3

13

stringi (バージョン >= 0.2-3) パッケージには、ランダムな文字列を生成する関数があります。

require(stringi)
stri_rand_strings(n=2, length=8, pattern="[A-Za-z0-9]")
## [1] "90i6RdzU" "UAkSVCEa"

したがって、さまざまなパターンを使用して、目的のパスワードの一部を生成し、次のように貼り付けることができます。

x <- stri_rand_strings(n=4, length=c(2,1,2,3), pattern=c("[a-z]","[A-Z]","[0-9]","[a-z]"))
x
## [1] "ex"  "N"   "81"  "tsy"
stri_flatten(x)
## [1] "exN81tsy"
于 2014-04-18T12:31:39.610 に答える
11

ここに1つのアプローチがあります

generate.password <- function(length,
                              capitals = integer(0),
                              numbers  = integer(0)) {

   stopifnot(is.numeric(length),   length   > 0L,
             is.numeric(capitals), capitals > 0L, capitals <= length,
             is.numeric(numbers),  numbers  > 0L, numbers  <= length,
             length(intersect(capitals, numbers)) == 0L)

   lc  <- sample(letters, length,           replace = TRUE)
   uc  <- sample(LETTERS, length(capitals), replace = TRUE)
   num <- sample(0:9,     length(numbers),  replace = TRUE)

   pass <- lc
   pass[capitals] <- uc
   pass[numbers]  <- num

   paste0(pass, collapse = "")
}


## Examples
set.seed(1)
generate.password(8)
# [1] "gjoxfxyr"

set.seed(1)
generate.password(length=8, capitals=c(2,4))
# [1] "gQoBfxyr"

set.seed(1)
generate.password(length=8, capitals=c(2,4), numbers=c(7:8))
# [1] "gQoBfx21"

同じ方法で他の特殊文字を追加することもできます。文字と数字の繰り返し値が必要な場合は、関数を追加 replace =TRUEsampleます。

于 2013-09-14T09:35:52.603 に答える
5

私は@Hadd E. Nuffによって与えられた解決策が好きでした...そして私がしたことは、0から9までの数字をランダムに含めることです...ここに修正された解決策があります...

generate.password <- function(LENGTH){
punct <- c("!",  "#", "$", "%", "&", "(", ")", "*",  "+", "-", "/", ":", 
         ";", "<", "=", ">", "?", "@", "[", "^", "_", "{", "|", "}", "~")
nums <- c(0:9)
chars <- c(letters, LETTERS, punct, nums)
p <- c(rep(0.0105, 52), rep(0.0102, 25), rep(0.02, 10))
pword <- paste0(sample(chars, LENGTH, TRUE, prob = p), collapse = "")
return(pword)
}

generate.password(8)

これにより、次のような非常に強力なパスワードが生成されます。

"C2~mD20U"         # 8 alpha-numeric-specialchar

"+J5Gi3"           # 6 alpha-numeric-specialchar

"77{h6RsGQJ66if5"  # 15 alpha-numeric-specialchar
于 2016-04-07T21:49:30.283 に答える