随机密码生成器 Swift 3?

Posted

技术标签:

【中文标题】随机密码生成器 Swift 3?【英文标题】:Random Password Generator Swift 3? 【发布时间】:2017-01-18 22:55:08 【问题描述】:

我正在为 ios 构建一个随机密码生成器。其中,一个按钮会生成一个随机密码,该密码具有用户选择的特征(例如,用于打开或关闭小写和大写字母、字符和符号等的开关)。

UI 看起来很棒,其余代码运行顺利,但我无法让我的按钮实际生成随机的字母数字字符串。我有一个带有一些占位符文本(“您的密码”)的标签,当按下按钮时,它的文本应该更新为随机字符串,但我收到编译器错误:“未解决使用标识符'长度'”

这里是按钮的当前代码:

@IBAction func generatePassword(_ sender: UIButton) 

    let randomPasswordArray: NSString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    let len = UInt32(randomPasswordArray.length)

    var randomPassword = ""

    for _ in 0 ..< length 
        let rand = arc4random(len)
        var nextChar = randomPasswordArray.character(at: Int(rand))
        randomPassword += NSString(characters: &nextChar, length: 1) as String
    

    passwordLabel.text = "randomPassword"

谢谢!

【问题讨论】:

那么你在哪里定义length 【参考方案1】:

首先使用您的密码允许的字符创建一个数组

let passwordCharacters = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".characters)

然后选择密码长度

let len = 8 

定义并清空字符串密码

var password = ""

创建一个循环来生成随机字符

for _ in 0..<len 
    // generate a random index based on your array of characters count
    let rand = arc4random_uniform(UInt32(passwordCharacters.count))
    // append the random character to your string
    password.append(passwordCharacters[Int(rand)])

print(password)   // "V3VPk5LE"

斯威夫特 4

您也可以使用 map 代替标准循环:

let pswdChars = Array("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")
let rndPswd = String((0..<len).map _ in pswdChars[Int(arc4random_uniform(UInt32(pswdChars.count)))])
print(rndPswd)   // "oLS1w3bK\n"

斯威夫特 4.2

使用新集合的randomElement() 方法:

let len = 8
let pswdChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
let rndPswd = String((0..<len).compactMap _ in pswdChars.randomElement() )
print(rndPswd)   // "3NRQHoiA\n"

【讨论】:

解决了。我忘记了我使用“len”而不是“length”。现在正在修复它,感谢您的帮助。 我觉得数字、符号、大小写字母最好在不同的字符串中,这样在需要时更容易满足密码的次要要求。 我刚刚修复了 OP 代码的问题。当然,我可以简单地分隔小写和大写元素以及数字和符号,但 OP 没有设置任何要求,例如至少一个小写、大写、数字或 .a 符号。您也可以简单地创建一个 while 循环来生成密码,直到满足要求。如果您需要密码验证器,可以查看此答案***.com/questions/31954416/…【参考方案2】:

你也可以使用

import Security

let password = SecCreateSharedWebCredentialPassword() as String?
print(password)

【讨论】:

太棒了。注意:不适用于 Watch OS。【参考方案3】:

你的代码应该是

...
for _ in 0 ..< len 
...

【讨论】:

以上是关于随机密码生成器 Swift 3?的主要内容,如果未能解决你的问题,请参考以下文章

Centos7下随机密码生成器

python 生成随机密码

测试工具研发_生成随机密码

PHP生成随机密码的4种方法及性能对比

随机生成指定长度的密码之---Random

python 生成随机密码