ios – 用作随机数的随机唯一字符串生成(oauth)

我试图使用UUID生成作为一个nonce用于Twitter反向身份验证.但显然UUID不是一个好选择.那么我怎样才能在每次删除所有非单词字符时生成一个唯一的随机字符串,注意它在使用后会从内存中释放出来.以下代码崩溃.

    var uuid: CFUUIDRef = CFUUIDCreate(nil)
    var nonce: CFStringRef = CFUUIDCreateString(nil, uuid)
    CFRelease(uuid)

    println("createdNonce:\(nonce)")

编辑:
我在xcode6 beta2上,我无法调试,xocde崩溃,任何机会它.好吧,CFRelease部分对我来说很糟糕.一旦我删除,它似乎工作正常,但我不知道这是否会造成内存泄漏.

至于为什么UUID可能不是用于nonce的好选择,似乎是因为,UUID不是由真正的随机位组成,参考这里的讨论:https://github.com/aws/aws-sdk-ios/issues/30

最佳答案
生成随机数的更正确方法可能是使用加密RNG生成随机字节. iOS碰巧有这样的事情:

var s = NSMutableData(length: 32)
SecRandomCopyBytes(kSecRandomDefault, UInt(s.length), UnsafePointer<UInt8>(s.mutableBytes))

// s is now a NSData containing 32 random bytes

然后使用API​​建议的任何格式(可能是Base64)转换为字符串,例如

let base64str = s.base64EncodedStringWithOptions(0)

编辑:上面的方法似乎是Twitter在文档中使用的方法.见here.我不知道是否更容易预测UUIDS.这取决于它们生成的方法. SecRandomCopyBytes似乎用于加密目的,因此它应该是安全的.

转载注明原文:ios – 用作随机数的随机唯一字符串生成(oauth) - 代码日志