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
45
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
PRODUCT HISTORY CONFERENCE 2024の裏側
krpk1900
0
21
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
770
【Kaigi on Rails 2024】YOUTRUST スポンサーLT
krpk1900
1
550
今日で分かる!カスタムコップの作り方
krpk1900
2
860
SNS特有のタイムライン機能におけるYOUTRUSTの工夫点
krpk1900
0
28
技術的負債に対してカスタムコップでできること
krpk1900
0
510
サービスを軌道に乗せるまで一人でやったすべてのこと
krpk1900
20
7.7k
RailsアプリでのCQSの運用を支える仕組みと文化
krpk1900
0
67
Kaigi on Rails 2023 〜運営の裏側〜
krpk1900
0
950
Other Decks in Programming
See All in Programming
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
QA環境で誰でも自由自在に現在時刻を操って検証できるようにした話
kalibora
1
140
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
6
710
AWS re:Invent 2024個人的まとめ
satoshi256kbyte
0
110
令和7年版 あなたが使ってよいフロントエンド機能とは
mugi_uno
10
5.3k
asdf-ecspresso作って 友達が増えた話 / Fujiwara Tech Conference 2025
koluku
0
1.4k
Rubyでつくるパケットキャプチャツール
ydah
0
180
Jaspr Dart Web Framework 박제창 @Devfest 2024
itsmedreamwalker
0
150
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
4
410
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
2.8k
各クラウドサービスにおける.NETの対応と見解
ymd65536
0
250
月刊 競技プログラミングをお仕事に役立てるには
terryu16
1
1.2k
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
53
13k
The Pragmatic Product Professional
lauravandoore
32
6.4k
Site-Speed That Sticks
csswizardry
3
270
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
4 Signs Your Business is Dying
shpigford
182
22k
Making the Leap to Tech Lead
cromwellryan
133
9k
Designing for humans not robots
tammielis
250
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
500
Dealing with People You Can't Stand - Big Design 2015
cassininazir
365
25k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
174
51k
It's Worth the Effort
3n
183
28k
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 ಇ͘ͻͱͷ݈߁ΛੈքதʹΔ