Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rubyのハッシュとパスワードのハッシュ化、まったく別物だと思っていませんか?
Search
Terai Shogo
November 16, 2022
Programming
0
48
Rubyのハッシュとパスワードのハッシュ化、まったく別物だと思っていませんか?
【iCARE Dev Meetup #36】Rejected CFP 供養会 2022 (
https://icare.connpass.com/event/261601/
)で発表した内容です。
Terai Shogo
November 16, 2022
Tweet
Share
More Decks by Terai Shogo
See All by Terai Shogo
富山発の個人開発サービスで日本中の学校の業務を改善した話
krpk1900
4
380
PRODUCT HISTORY CONFERENCE 2024の裏側
krpk1900
0
27
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
850
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
600
今日で分かる!カスタムコップの作り方
krpk1900
2
920
SNS特有のタイムライン機能におけるYOUTRUSTの工夫点
krpk1900
0
30
技術的負債に対してカスタムコップでできること
krpk1900
0
520
サービスを軌道に乗せるまで一人でやったすべてのこと
krpk1900
20
7.8k
RailsアプリでのCQSの運用を支える仕組みと文化
krpk1900
0
72
Other Decks in Programming
See All in Programming
color-scheme: light dark; を完全に理解する
uhyo
3
270
Pulsar2 を雰囲気で使ってみよう
anoken
0
240
Introduction to kotlinx.rpc
arawn
0
690
CNCF Project の作者が考えている OSS の運営
utam0k
6
710
お前もAI鬼にならないか?👹Bolt & Cursor & Supabase & Vercelで人間をやめるぞ、ジョジョー!👺
taishiyade
6
4k
GitHub Actions × RAGでコードレビューの検証の結果
sho_000
0
260
ARA Ansible for the teams
kksat
0
150
パスキーのすべて ── 導入・UX設計・実装の紹介 / 20250213 パスキー開発者の集い
kuralab
3
780
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
110
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
110
昭和の職場からアジャイルの世界へ
kumagoro95
1
370
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
220
Featured
See All Featured
The Invisible Side of Design
smashingmag
299
50k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
Bash Introduction
62gerente
611
210k
Music & Morning Musume
bryan
46
6.3k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.2k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
Adopting Sorbet at Scale
ufuk
74
9.2k
Building Your Own Lightsaber
phodgson
104
6.2k
A better future with KSS
kneath
238
17k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Practical Orchestrator
shlominoach
186
10k
Transcript
גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ(@krpk1900_dev) Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ ·ͬͨ͘ผͩͱࢥ͍ͬͯ·ͤΜ͔ʁ
2 גࣜձࣾiCARE αʔόʔαΠυΤϯδχΞ ࣉҪ লޗ 20218݄ʹגࣜձࣾiCAREʹೖࣾɻ 20228݄ΑΓԠ༻తೝՄػೳPJ։ൃϦʔμʔɺ 202210݄͔Β৽ن։ൃνʔϜͷϦʔμʔΛ݉ɻ RailsͱGraphQLΛ༻͍ͨ։ൃΛओʹ୲͍ͯ͠·͢ɻ ࣗݾհ
@krpk1900_dev
3 ࠓͷൃද༰ɺ RubyKaigi 2022ʹఏग़ͨ͠CFPΛ վมͨ͠ͷͰ͢ ͓͜ͱΘΓ
4 ͍͑ͨ͜ͱ ᶃ Rubyͷϋογϡʹؔ͢Δࣝ ᶄ Rubyͷൃలͷཪʹ͋ͬͨࢲ͕ײಈͨ͠Τϐιʔυ ᶅ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
5 ᶃ Rubyͷϋογϡʹ͍ͭͯ
6 Rubyͷϋογϡͬͯ ͝ଘͰ͠ΐ͏͔ʁ Rubyͷϋογϡ
7 {key: value} Rubyͷϋογϡ
8 ύεϫʔυͷอଘͳͲͰग़ͯ͘Δ ϋογϡԽͬͯ ͝ଘͰ͠ΐ͏͔ʁ ύεϫʔυͷϋογϡԽ
9 ϋογϡؔ ύεϫʔυͷϋογϡԽ password d39a9902c2
10 Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ શ͘ผͩͱࢥ͍ͬͯ·ͤΜ͔ʁ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
11 ࣮͍ؔͯ͠ΔΜͰ͢ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
12 Rubyͷϋογϡͱ ύεϫʔυͷϋογϡԽɺ ͲͪΒϋογϡ͕ؔΘΕ͍ͯΔ RubyͷϋογϡͱύεϫʔυͷϋογϡԽ
13 • RubyͷHashͰɺkeyΛ୳ࡧ͢Δͱ͖ʹϋογϡ͕ؔΘΕ͍ͯΔ • ԿͷͨΊʹʁ ԿͷͨΊʹϋογϡ͕ؔΘΕ͍ͯΔͷ͔
14 • ޮͷྑ͍୳ࡧΛߦ͏ͨΊ • ϋογϡ୳ࡧͰɺ୳ࡧʹ͔͔ΔܭࢉྔO(1)ͱઆ໌͞ΕΔ ϋογϡ୳ࡧ ྫɿϋογϡͷཁૉ͕1000000Ͱ ɹɹkey͕ teraiͰ͋Δσʔλͷ୳ࡧʹ
ɹɹཁૉʹൺྫͤͣɺҰఆͷ࣌ؒͰ୳ࡧՄೳ 1000000ݸ {terai: 178, … , endo: 196} key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ
15 • ཁૉ͕େͰҰఆͷ࣌ؒͰܭࢉͰ͖Δͱ͍͏ͷຊͳͷ͔ʁ • ୯७ʹߟ͑Δͱɺ্͔ΒॱʹҰக͍ͯ͠Δ͔Λݟ͍ͯ͘ඞཁ͕ ͋ΔͨΊɺཁૉ n ʹൺྫͦ͠͏
ϋογϡ୳ࡧ key value ộ ộ ito 113 shiga 64 terai 178 ộ ộ n ݸ ộ terai Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ Ұக͍ͯ͠Δ͔ʁ ộ terai terai
16 • ͔ͨ͠ʹ্͔Βॱʹ֬ೝ͍ͯ͘͠߹ O(n)ͱͳͬͯ͠·͏ • ͜͜Ͱ༻͍ΒΕΔ͕ϋογϡςʔϒϧ ϋογϡ୳ࡧ
17 • ϋογϡςʔϒϧͰɺkeyͱvalueΛϝϞϦʹ֨ೲ͢Δͱ͖ʹ ϝϞϦͷͲ͜ʹ֨ೲ͢Δ͔ʹنଇ͕͋Δ ϋογϡ୳ࡧ ϝϞϦ൪ key value ộ
ộ ộ 0x1020 0x1024 0x1028 ộ ộ ộ 1000000ݸ {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍
18 • نଇʹैͬͯ֨ೲ͢Δͱ͍͏͜ͱɺ୳ࡧ͖͢ॴΛಛఆͰ͖Δ • ͜Ε͕O(1)ͱͳΔཧ༝ • نଇ͕ͳ͍ͱɺઌ΄ͲͷΑ͏ʹ্͔Βॱʹ֬ೝ͢Δ͔͠ͳ͍ ϋογϡ୳ࡧ ϝϞϦ൪ key
value ộ ộ ộ 0x1020 ito 113 0x1024 shiga 64 0x1028 terai 178 ộ ộ ộ 1000000ݸ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ {terai: 178}
19 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ
20 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϝϞϦ൪ key value ộ ộ ộ 0x1020 0x1024 0x1028 ộ 0x1408 ộ ộ ộ ςʔϒϧαΠζ1000
21 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ terai d39a9902c2
22 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ ϋογϡؔ terai d39a9902c2 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162
23 • ͰͲͷΑ͏ͳنଇʹैͬͯ֨ೲ͍ͯ͠Δͷ͔ʁ 1. ҰఆͷϝϞϦྖҬΛ֬อ͢ΔʢςʔϒϧαΠζʣ 2. key͔ΒϋογϡΛٻΊΔ 3. ϋογϡΛςʔϒϧαΠζͰׂͬͨ༨ΓΛٻΊΔ 4.
ͦͷΛΦϑηοτͱͯ֨͠ೲ͢ΔϝϞϦ൪Λܾఆ͢Δ ϋογϡςʔϒϧͷنଇ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024 ộ 0x10C6 terai 178 ộ 0x1408 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ {terai: 178}
24 ϋογϡςʔϒϧ͔Β୳ࡧ͢Δͱ͖ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024
ito 113 ộ 0x10C6 terai 178 ộ 0x1408 shiga 64 ộ ộ ộ ೖ͍ͬͯΔͳΒ͔͜͜͠ͳ͍ ্͔Βશ෦֬ೝ͠ͳͯ͘1ճͰ͍͚Δ • ಉ༷ͷखॱͰkey͔ΒΦϑηοτΛܭࢉ͢Δ͜ͱͰɺ ϋογϡςʔϒϧͷ֬ೝ͢Εྑ͍ϝϞϦ൪ΛಛఆͰ͖Δ terai
25 ͨͩ͠1͕ͭ͋Δ ϋογϡςʔϒϧͷ
26 • িಥ ϋογϡςʔϒϧͷ ϋογϡؔ terai 10162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ
162 niwa 20162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162 takei 30162 ςʔϒϧαΠζ1000Ͱ ׂͬͨ༨Γ 162 ςʔϒϧαΠζͰׂΔ͜ͱʹΑͬͯ ςʔϒϧαΠζະຬʹมͨ݁͠Ռ ಉ͡ʹͳͬͯ͠·͏߹
27 ϋογϡςʔϒϧͷ 162 ϝϞϦ൪ key value ộ ộ ộ 0x1024
ito 113 ộ 0x10C6 ? ? ộ 0x1408 shiga 64 ộ ộ ộ ೖΕΔͳΒ͔͜͜͠ͳ͍ • িಥ͕ى͖Δͱ… {terai: 178} ೖΕΔͳΒ͔͜͜͠ͳ͍ {niwa: 211} ೖΕΔͳΒ͔͜͜͠ͳ͍ {takei: 362}
28 ༗໊ͳղܾ๏ • νΣΠϯ๏ • ΦʔϓϯΞυϨε๏ ϝϞϦ൪ ộ ộ
0x1024 {ito: 113} ộ 0x10C6 ộ ộ {terai: 178} {niwa: 211} {takei: 362} ϝϞϦ൪ ộ ộ 0x1024 {ito: 113} ộ 0x10C6 {terai: 178} 0x10CA {niwa: 211} 0x10CE {takei: 362} ộ 0x1408 {shiga: 64} ộ ộ ͕࣌ؒͳ͍ͨΊ ΞϧΰϦζϜͷઆ໌ׂѪ
29 • ͪͳΈʹRubyͷHashͷ༝དྷɺPerlͷHash Table͕͢ͰʹHashͱ ݺΕ͍͔ͯͨΒʢMatzʹ֬ೝࡁΈʣ • ࿈ྻͱɺҎ֎Λఴࣈʹ͢Δ͜ͱ͕Ͱ͖Δྻͷ͜ͱ • ࿈ྻଞͷݴޠͰҎԼͷΑ͏ʹݺΕΔ
• Ϛοϓ • ࣙॻʢσΟΫγϣφϦʣ • ࿈Ϧετ ༨ஊɿRubyͷϋογϡͷ༝དྷ
30 ᶄ Rubyͷൃలͷཪʹ͋ͬͨ ɹ ࢲ͕ײಈͨ͠Τϐιʔυ
31 • RubyͰɺνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ʹมߋ͢ΔఏҊ͕ 2016ʹMakarov͞ΜʹΑͬͯߦΘΕͨ • CPUͷਐԽʹ͍ɺΦʔϓϯΞυϨε๏ͷํ͕ ޮ͕ྑ͘ͳ͖ͬͯͨͨΊ •
PythonPHPͰಉ༷ͷมߋ͕ߦΘΕͨͨΊ RubyͷมߋͷఏҊ RubyKaigi 2022Ͱൃද͞Ε͍ͯͨ Makarov͞Μ
32 • νΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ͷมߋʹ͍ͭͯɺ Martin͞Μ͕ผͷ࣮ΛఏҊ͞Εͨ • ͲͪΒ͕RubyʹऔΓࠐ·ΕΔ͔ɺͱ͍ͯ ͕ٞߦΘΕͨ RubyͷมߋͷఏҊ
Martin͞ΜRubyKaigi 2021Ͱ ൃද͞Ε͍ͯΔ
33 • ύϑΥʔϚϯεʹେ͖ͳࠩͳ͔͕ͬͨ Makarov͞Μͷ࣮ͷํ͕গ͚ͩ͠γϯϓϧͰ͋Δͱஅ͠ɺ Matz Makarov͞Μͷ࣮ΛRubyʹऔΓࠐΜͩ • ന͍ͯͨٞ͠ΛݟΔͱɺ͓ͦΒ͘Martin͞Μͷதʹ
չ͠͞൵͠͞ͷΑ͏ͳؾ࣋ͪ͋ͬͨͱࢲࢥ͍·͢ RubyͷมߋͷఏҊ
34 • ͔͠͠ɺٞͷ࠷ޙʹMartin͞Μ͕͞Ε͍ͯͨݴ༿Λ ݟͨͱ͖ɺࢲ͘͢͝ײಈ͠·ͨ͠ Martin͞Μͷݴ༿
35 ΦʔϓϯιʔειϑτΣΞθϩαϜήʔϜͰ͋Γ·ͤΜɻ ࠓRubyͷτϥϯΫʹ͋ΔύονΛͬͯ͢Εɺશһ͕ಘΛ͢Δͱ ࢲߟ͍͑ͯ·͢ɻ ͋ͳͨಘΛͯ͠ɺMakarov͞ΜಘΛͯ͠ɺ ଞͷΈͳ͞ΜಘΛͯ͠ɺͦͯ͠RubyಘΛ͢ΔͷͰ͢ʂ
Έͳ͞Μɺຊʹ͋Γ͕ͱ͏͍͟͝·͢ɻ Martin͞Μͷݴ༿
36 Martin͞Μͷݴ༿ • ͜ͷΑ͏ͳ͜ͱΛॻ͘͜ͱࣗମ͕ࣦྱʹ͋ͨΔ͔͠Ε·ͤΜ͕ɺ ࣗͷ࣮͕औΓࠐ·ΕΔ͜ͱʹΑͬͯಘΒΕΔ໊༪ͳΜ͔Ͱ ͳ͘ɺਅʹRubyͷൃలΛئ͍ͬͯΔਓ͔Β͔͠ग़ͯ͜ͳ͍ݴ༿ ͩͱɺࢲ͜ΕΛݟͨͱ͖ʹײ͡·ͨ͠
• Έͳ͞ΜʹͬͯΒ͍͍ͨͱࢥͬͯࠓհ͠·ͨ͠
37 ᶅ ॳ৺ऀͰCFPΛग़ͯ͠ ɹ ྑ͍ͱ͍͏͜ͱ
38 • ࢲΤϯδχΞʹͳ͔ͬͯΒ·ͩ1ͰɺԿΛͱͬͯ ࣗ৴͕͋Δͱݴ͑·ͤΜ • ͔͠͠ɺRubyKaigiͱKaigi on RailsʹCFPΛग़ͯ͠Έ·ͨ͠ •
CFPͷaccept / reject ΛܾΊΔͷӡӦଆͳͷͰɺ ॳ৺ऀ͕ʢ͔ͨ͠͠ΒϨϕϧͷ͍ʣCFPΛఏग़ͯ͠ ୭ʹ໎͔͔Βͳ͍ͱࢥ͍·͢ • ࠷ॳΈΜͳॳ৺ऀͩͬͨͣ • Ή͠Ζॳ৺ऀͷൃද༰͕͞͞Δ͖ͬͱ͍Δͣ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
39 • CFPΛఏग़͢Δͱ͍͏ߦಈΛͨ͜͠ͱʹΑͬͯಘΒΕΔ ࣝܦݧɺਓͱͷग़ձ͍͕͋Δͱࢥ͍·͢ • ࠷ॳؾ͕Ҿ͚ͨΓͳ͔ͳ͔༐ؾ͕ग़ͳ͍͔͠Ε·ͤΜ͕ɺ ࢲͷΑ͏ʹࣝܦݧ͕গͳ͍ਓ͕CFPΛग़ͯ͠
໎͔͔͍ͬͯ·ͤΜ͠ɺग़ͯ͠Έͯྑ͔ͬͨͳͱײ͍ͯ͡·͢ • ͠໎͍ͬͯΔํ͕͓ΒΕͨΒɺ͜ͷ͕ͦͷਓͷഎதΛԡ͢ ͖͔͚ͬʹͳΔ͜ͱΛئ͍ͬͯ·͢ ॳ৺ऀͰCFPΛग़ͯ͠ྑ͍ͱ͍͏͜ͱ
40 • Ruby master Feature #12142 ʢνΣΠϯ๏͔ΒΦʔϓϯΞυϨε๏ͷมߋͷఏҊ͕ߦΘΕͨ ɹεϨουʣ
• Rubyͷྻ(Array)Λຐվͯ͠ɺ࿈ྻͱͯͬͯ͠Έͨ ʢϋογϡςʔϒϧͷنଇΛࢀߟʹͨ͠هࣄʣ ࢀߟʹͨ͠هࣄ
͝ਗ਼ௌͲ͏͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ
42 ಇ͘ͻͱͷ݈߁ΛੈքதʹΔ