[解決済み] SHA256 in swift
2022-12-20 20:14:34
質問
プロジェクトでsha256を使用したいのですが、objCのコードをswiftのコードに書き換えるのに苦労しています。助けてください。こちらの回答を参考にさせていただきました。 iOSでSHA-2(理想的にはSHA256またはSHA512)ハッシュを計算するにはどうすればよいですか?
以下は私のコードです。
var hash : [CUnsignedChar]
CC_SHA256(data.bytes, data.length, hash)
var res : NSData = NSData.dataWithBytes(hash, length: CC_SHA256_DIGEST_LENGTH)
を変換できないので、すべてエラーになります。
Int
を
CC_LONG
に変更する。
どのように解決するのですか?
の間で明示的に変換する必要があります。
Int
と
CC_LONG
というように、Swift は暗黙の変換をしないので
のように暗黙の変換を行わないからです。
を定義する必要があります。
hash
を必要な大きさの配列として定義する必要があります。
func sha256(data : NSData) -> NSData {
var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
return res
}
あるいは
NSMutableData
を使って必要なバッファを確保することもできます。
func sha256(data : NSData) -> NSData {
let res = NSMutableData(length: Int(CC_SHA256_DIGEST_LENGTH))
CC_SHA256(data.bytes, CC_LONG(data.length), UnsafeMutablePointer(res.mutableBytes))
return res
}
Swift 3 および 4 に対応したアップデートを行いました。
func sha256(data : Data) -> Data {
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0, CC_LONG(data.count), &hash)
}
return Data(bytes: hash)
}
Swift 5に対応したアップデートです。
func sha256(data : Data) -> Data {
var hash = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
data.withUnsafeBytes {
_ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash)
}
return Data(hash)
}
関連
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] Swiftでindexとelementでループを反復させる方法
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Swiftの@selector()?
-
[解決済み】SHA256ハッシュの長さはどれくらいですか?
-
[解決済み] Swiftで複数のカスタムセルを持つUITableview
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] Swift: switch ケースでオプションの値に対するテストを行う
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Swiftで1つのビューコントローラの向きを縦向きのみに固定する方法
-
[解決済み] Swiftダブルからストリング
-
[解決済み] swiftで改行なしの印刷をする
-
[解決済み] タスクが終了するまで待機する
-
[解決済み] Swiftで複数のカスタムセルを持つUITableview
-
[解決済み] swiftにおける "precondition "と "assert "の違いとは?
-
[解決済み] 固定サイズのオブジェクトの配列を作成する方法
-
[解決済み] Swift: switch ケースでオプションの値に対するテストを行う
-
[解決済み] SwiftUIのForEachでインデックスを取得する
-
[解決済み] NSFetchRequestのインスタンスに型を適用する方法は?