- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想在 Swift 3.0 中使用 SecRandomCopyBytes
生成随机字节。这是我在 Swift 2.2 中的做法
private static func generateRandomBytes() -> String? {
let data = NSMutableData(length: Int(32))
let result = SecRandomCopyBytes(kSecRandomDefault, 32, UnsafeMutablePointer<UInt8>(data!.mutableBytes))
if result == errSecSuccess {
return data!.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
} else {
print("Problem generating random bytes")
return nil
}
}
在 Swift 3 中,我尝试这样做,因为我知道 unsafemutablebytes 的概念现在不同了,但它不允许我返回。如果我注释掉返回部分,它仍然说 Generic Parameter ResultType could not be inferred
fileprivate static func generateRandomBytes() -> String? {
var keyData = Data(count: 32)
_ = keyData.withUnsafeMutableBytes {mutableBytes in
let result = SecRandomCopyBytes(kSecRandomDefault, keyData.count, mutableBytes)
if result == errSecSuccess {
return keyData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0))
} else {
print("Problem generating random bytes")
return nil
}
}
return nil
}
有人知道如何解决这个问题吗?
谢谢
最佳答案
你很接近,但是闭包内的 return
返回来自闭包,而不是来自外部函数。因此只有 SecRandomCopyBytes()
应该在关闭,返回结果。
func generateRandomBytes() -> String? {
var keyData = Data(count: 32)
let result = keyData.withUnsafeMutableBytes {
(mutableBytes: UnsafeMutablePointer<UInt8>) -> Int32 in
SecRandomCopyBytes(kSecRandomDefault, 32, mutableBytes)
}
if result == errSecSuccess {
return keyData.base64EncodedString()
} else {
print("Problem generating random bytes")
return nil
}
}
对于“单表达式闭包”,可以推断出闭包类型自动,所以这可以缩短为
func generateRandomBytes() -> String? {
var keyData = Data(count: 32)
let result = keyData.withUnsafeMutableBytes {
SecRandomCopyBytes(kSecRandomDefault, 32, $0)
}
if result == errSecSuccess {
return keyData.base64EncodedString()
} else {
print("Problem generating random bytes")
return nil
}
}
Swift 5 更新:
func generateRandomBytes() -> String? {
var keyData = Data(count: 32)
let result = keyData.withUnsafeMutableBytes {
SecRandomCopyBytes(kSecRandomDefault, 32, $0.baseAddress!)
}
if result == errSecSuccess {
return keyData.base64EncodedString()
} else {
print("Problem generating random bytes")
return nil
}
}
关于ios - 在 Swift 中使用 SecRandomCopyBytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39820602/
当我尝试存档我的应用程序的新版本时,我在 xCode 上遇到错误,我无法弄清楚它来自哪里以及如何修复它。 查看来自 xcode 的打印屏幕:Screenshot 最佳答案 iOS 11 更改了该方
我主要对 SecRandomCopyBytes 在 iOS 上的实现感兴趣,如果它与 OS X 实现不同的话。 (我假设它确实如此,因为移动设备比台式计算机拥有越来越多的可用熵源。) 有没有人知道:
我正在使用 SecRandomCopyBytes用于生成安全的随机数。 有没有办法指定“范围”? 我需要获得这段 Java 代码的相同行为: SecureRandom r = new SecureRa
我想在 Swift 3.0 中使用 SecRandomCopyBytes 生成随机字节。这是我在 Swift 2.2 中的做法 private static func generateRandomBy
在 Objective-C 中,我可以这样做: NSMutableData *data = [NSMutableData dataWithLength:length]; int result = Se
我想在 Swift 3.0 中使用 SecRandomCopyBytes 生成随机字节。这是我在 Swift 2.2 中的做法 private static func generateRandomBy
许多用户空间 CSPRNG 有一个问题,即在 fork(2) 之后,两个不同的进程可能会返回相同的随机字节流。 通过查看 dtruss,很明显 SecRandomCopyBytes 至少是从 /dev
请任何人澄清在 SecRandomCopyBytes 中使用了哪种类型的提供程序(SHA1PRNG 或 NativePRNG)。提前致谢。 最佳答案 SHA1PRNG 和 NativePRNG 是随机
我一直在使用 UUIDString 作为存储在我的 iPAD 上的文件的加密 key ,但第三方对我的应用程序进行的安全审查建议如下。 随着应用程序的启动,将生成一个全局数据库 key 并将其存储在钥
我是一名优秀的程序员,十分优秀!