ハッシュ関数と暗号化
19780 ワード
ハッシュ関数
ユニークな識別値を作成する関数
ハッシュ・マッピングによるターゲットのキー値の検索
数学の定義
ジョン・スミスとサンドラディのハッシュ値は02で、同じ問題が発生した.
非暗号ハッシュ
暗号学のハッシュ関数よりも安全ではありません.
安全でない場所に多く使われる
例:XOR演算を使用したサイクル冗長チェックサム
元のデータを検証して保証します.
XORが違うと斬り返す
パケット転送で見られる概念のようです.
パスワードハッシュ
MD 5(Message-Digest)、SHA-1(セキュリティハッシュアルゴリズム)はセキュリティ上安全ではないため、SHA-2(SHA-256はよく知られている)を用いる
MD 5は128ビットを使用し、出力値は16進数(4ビットは1ビット)で32ビットの出力値を持つ
出力値の長さは同じです.
入力値を圧縮する効果もあるため、衝突衝突が発生し、ランダム入力攻撃を受けやすい
羽毛にssh鍵を生成する際に使用したのを覚えています.
ssh-keygen -t rsa -b 4096 -C
これは現在SSL/TLSで最もよく用いられている公開鍵暗号化アルゴリズムである.現在、ツリーウィキペディアもHTTPSでRSA 2048証明書を使用しており、世界のほとんどのネットバンク(韓国を含む)がこのRSA 2048暗号化を使用している.
暗号化
データ転送に必要なパスワードと復号化
対称鍵暗号化
暗号化と復号化は同じ鍵を使用します
DES(Data Encryption Standard), AES(Andvanced Ecryption Standard)
対称鍵通信は対称鍵を露出します
非対称鍵暗号化(公開鍵+秘密鍵)
暗号化には公開鍵,復号化には秘密鍵を用いる.
RSA暗号化は秘密鍵を使用し、復号は秘密鍵を使用するので、電子署名に使用できます.
サーバ上で公開鍵を共有(復号化)し、ユーザが秘密鍵を使用しながら(暗号化)サーバにデータの表示のみを許可する
非対称鍵の通信速度が遅い
対称キー+公開キー
セキュアソケット層(SSL)暗号化方法
対称鍵+公開鍵方式に認証機構を加え,公開鍵の有効性を調べる.
SSL証明書ファイルタイプ.pem, .crt, .cer, .csr, .der, .pfx, .p12, .key, .jksなどの形態がある
SSLはセキュリティ上の欠陥があり、実際にTLS方式を使用しています
HTTPS+SSL->HTTPS:WebにSSLソケットをインストールする際にhttpsを使用
FTP+SSL->SFTP:ファイル転送中にsslスロットを追加した場合、sftp
sweetのハッシュテーブル
時間複雑度O(1)
Dictionaryタイプとして定義します.
Hashableプロトコルに従う必要があります
modulo(mod)モジュール化演算%:残りを求める
25 % 7 = 4 +-----+
| 0 |
+-----+ +----------------------------+
| 1 |---> | hobbies: Programming Swift |
+-----+ +----------------------------+
| 2 |
+-----+ +------------------+ +----------------+
| 3 |---> | firstName: Steve |---> | lastName: Jobs |
+-----+ +------------------+ +----------------+
| 4 |
+-----+
hashTable["firstName"] = "Steve"
hashTable["hobbies"] = "Programming Swift"
print("firstName".hashValue) //-4799450059917011053
//"firstName"(키)은 Hashable하다
//array size로 mod한 값이 index가 된다
//예시에서 array의 사이즈가 5이므로 "firstName"의 인덱스는 abs(-4799450059917011053) % 5 = 3 이 된다.
let x = hashTable["lastName"] //충돌Collision발생
//3번 bucket에 연결리스트로 chain을 만든다
//3번 bucket에 접근한 후 선형탐색을 한번 더 실행하게 된다
Hashableという言葉.
Dictionaryデータ構造(key-value)
key値はindexを持つことができますか?
Hashable...Hashable... 少し知っている
対称鍵+公開鍵方式に認証機構を加え,公開鍵の有効性を調べる.
SSL証明書ファイルタイプ.pem, .crt, .cer, .csr, .der, .pfx, .p12, .key, .jksなどの形態がある
SSLはセキュリティ上の欠陥があり、実際にTLS方式を使用しています
HTTPS+SSL->HTTPS:WebにSSLソケットをインストールする際にhttpsを使用
FTP+SSL->SFTP:ファイル転送中にsslスロットを追加した場合、sftp
sweetのハッシュテーブル
時間複雑度O(1)
Dictionaryタイプとして定義します.
Hashableプロトコルに従う必要があります
modulo(mod)モジュール化演算%:残りを求める
25 % 7 = 4 +-----+
| 0 |
+-----+ +----------------------------+
| 1 |---> | hobbies: Programming Swift |
+-----+ +----------------------------+
| 2 |
+-----+ +------------------+ +----------------+
| 3 |---> | firstName: Steve |---> | lastName: Jobs |
+-----+ +------------------+ +----------------+
| 4 |
+-----+
hashTable["firstName"] = "Steve"
hashTable["hobbies"] = "Programming Swift"
print("firstName".hashValue) //-4799450059917011053
//"firstName"(키)은 Hashable하다
//array size로 mod한 값이 index가 된다
//예시에서 array의 사이즈가 5이므로 "firstName"의 인덱스는 abs(-4799450059917011053) % 5 = 3 이 된다.
let x = hashTable["lastName"] //충돌Collision발생
//3번 bucket에 연결리스트로 chain을 만든다
//3번 bucket에 접근한 후 선형탐색을 한번 더 실행하게 된다
Hashableという言葉.
Dictionaryデータ構造(key-value)
key値はindexを持つことができますか?
Hashable...Hashable... 少し知っている
+-----+
| 0 |
+-----+ +----------------------------+
| 1 |---> | hobbies: Programming Swift |
+-----+ +----------------------------+
| 2 |
+-----+ +------------------+ +----------------+
| 3 |---> | firstName: Steve |---> | lastName: Jobs |
+-----+ +------------------+ +----------------+
| 4 |
+-----+
hashTable["firstName"] = "Steve"
hashTable["hobbies"] = "Programming Swift"
print("firstName".hashValue) //-4799450059917011053
//"firstName"(키)은 Hashable하다
//array size로 mod한 값이 index가 된다
//예시에서 array의 사이즈가 5이므로 "firstName"의 인덱스는 abs(-4799450059917011053) % 5 = 3 이 된다.
let x = hashTable["lastName"] //충돌Collision발생
//3번 bucket에 연결리스트로 chain을 만든다
//3번 bucket에 접근한 후 선형탐색을 한번 더 실행하게 된다
長所
平均時間複雑度O(1)
入力、削除、検索は一般的な配列よりも速い
短所
衝突が発生すると、チェーンが多ければ多いほど速度が遅くなります.
スペース複雑度の増大
サブスクリプト
スクリプトは、クラス、構造、列挙で定義および使用できます.
集合、リスト、シーケンスなど、集合内の特定のメンバー・セグメントにアクセスするための簡単な構文です.
someArray[index]
someDictionary[key]
getter、setter方式に従う
public struct HashTable<Key: Hashable, Value> {
private typealias Element = (key: Key, value: Value)
private typealias Bucket = [Element]
private var buckets: [Bucket] //chain
private(set) public var count = 0
public var isEmpty: Bool { return count==0 }
public init(capacity: Int) {
assert(capacity>0)
buckets = Array<Bucket>(repeating: [], count: capacity)
}
private func index(forKey key: Key) -> Int {
return abs(key.hashValue % buckets.count)
}
//subscript에 있는 value, updateValue, removeValue구현하기
public func value(forKey key: Key) -> Value? {
let index = self.index(forKey: key) // 내장함수 .index(forkey: )
for element in buckets[index] {
if element.key == key {
return element.value
}
}
return nil //key not in hash table
}
public mutating func updateValue(_ value: Value, forKey key: Key) -> Value? {
let index = self.index(forKey: key)
// Do we already have this key in the bucket?
for (i, element) in buckets[index].enumerated() {
if element.key == key {
let oldValue = element.value
buckets[index][i].value = value
return oldValue
}
}
// This key isn't in the bucket yet; add it to the chain.
buckets[index].append((key: key, value: value))
count += 1
return nil
}
public mutating func removeValue(forKey key: Key) -> Value? {
let index = self.index(forKey: key)
//Find the element in the bucket's chain and remove it
for (i, element) in buckets[index].enumerated() {
if element.key == key {
buckets[index].remove(at: i)
count -= 1
return element.value
}
}
return nil //key not in hash table
}
public subscript(key: Key) -> Value? {
get {
return value(forKey: key)
}
set {
if let value = newValue {
updateValue(value, forKey: key)
} else {
removeValue(forKey: key)
}
}
}
}
var hashTable = HashTable<String, String>(capacity: 5)
hashTable["firstName"] = "Steve"//insert
let x = hashTable["firstName"] //lookup
hashTable["firstName"] = "Tim" //update
hashTable["firstName"] = nil //remove
Reference
この問題について(ハッシュ関数と暗号化), 我々は、より多くの情報をここで見つけました https://velog.io/@msi753/알고리즘과-자료-구조-해시함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol