我正在使用SecRandomCopyBytes
來生成安全隨機數。使用SecRandomCopyBytes生成範圍內的隨機數
有沒有辦法指定「範圍」?
我需要獲得此Java
一段代碼相同的行爲:
SecureRandom r = new SecureRandom();
char x = (char)(r.nextInt(26) + 'a');
任何提示會明白!
UPDATE
看到我犯了個愚蠢的問題,我覺得有必要分享的解決方案,提出延長int類型:
public extension Int {
/**
Create a random num Int in range
:param: lower number Int
:param: upper number Int
:return: random number Int
*/
public static func random(#min: Int, max: Int) -> Int {
return Int(arc4random_uniform(UInt32(max - min + 1))) + min
}
/**
Create a secure random num Int in range
:param: lower number Int
:param: upper number Int
:return: random number Int
*/
public static func secureRandom(#min: Int, max: Int) -> Int {
if max == 0 {
NSException(name: "secureRandom", reason: "max number must be > 0", userInfo: nil).raise()
}
var randomBytes = UnsafeMutablePointer<UInt8>.alloc(8)
SecRandomCopyBytes(kSecRandomDefault, 8, randomBytes)
let randomNumber = unsafeBitCast(randomBytes, UInt.self)
return Int(randomNumber) % max + min
}
}
哦..我才意識到我的故事讓最愚蠢的問題! –
哈哈不用擔心:D有時候,本能讓你在提問之前發表一個問題;) – nburk
這也發生在幾個小時的代碼移植之後!殺我! –