SHA256とは
任意長の原文から固定長の特徴的な値である「ハッシュ値」を求める計算手順(アルゴリズム)の一つ。
最長で2の64乗ビットまでの原文から、256ビットのハッシュ値を算出することができる。
参考: http://e-words.jp/w/SHA-256.html
Swift で SHA256 の値を求める
String の extension
として実装してみました。
extension String {
func sha256String() -> String {
let cstr = self.cStringUsingEncoding(NSUTF8StringEncoding)
let data = NSData(bytes: cstr!, length: countElements(self))
var digest = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
CC_SHA256(data.bytes, CC_LONG(data.length), &digest)
var output = NSMutableString(capacity: 64)
for var i=0; i<32; i++ {
output.appendFormat("%02x", digest[i])
}
return output as String
}
}
使い方
下記のように利用します。
let tokenedString = "password".sha256String()
使い道
ハッシュ値の活用例としては、例えばパスワードの保存がある。
ハッシュ値を使えば、生のテキスト・パスワードを保存しなくて済むので安全性が高まる
(万が一、ハッシュ値が漏れても、それから実際のパスワードは取得できない)。
また、例えば2者間で送受信したデータが不正ではないかをチェックしたいときにも使える。
この場合、送信者と受信者におけるデータのハッシュ値を比較するだけで、
そのデータが壊れていないかどうかを確認できる(いわゆるチェックサム)。
参考: http://www.atmarkit.co.jp/fdotnet/dotnettips/964computehash/computehash.html
間違いがありましたらご指摘いただけると助かります。