256bit乱数を生成する方法
256bitに限った話ではないのですが、大きめの乱数を生成する方法です。
乱数の生成は以下のように様々な方法がありますが、
- RandomNumberGenerator
- arc4random()
- arc4random_uniform()
- rand()
- random()
いずれにしても最大で64bitまでしか生成出来ないようです。
これ以上の長さの乱数を生成する場合、Security FrameworkのSecRandomCopyBytes()
を使用します。
- 生成
func generate256bitRandom() -> Data? { let count = 32 // 32byte = 256bit var data = Data(count: count) let status = data.withUnsafeMutableBytes { body in SecRandomCopyBytes(kSecRandomDefault, count, body.baseAddress!) } if status == errSecSuccess { return data } return nil }
- 呼び出し
print(generate256bitRandom()!.base64EncodedString()) // "oyICfMgwGXUVeML+Lmhb5ixnAB1io+mNI4BlxNYXVaA=" (呼び出し毎に変わる)
let count = 32
の部分を調整してあげれば、128bitでも512bitでも生成出来ると思います。