Saladpuk.com
🏆 เนื้อหาหลัก
🏆 เนื้อหาหลัก
  • 💖สลัดผัก
  • 📰มีอะไรใหม่บ้าง
    • 2020
      • 2020-11
      • 2020-10
      • 2020-09
      • 2020-08
      • 2020-03
      • 2020-02
      • 2020-01
    • 2019
      • 2019-12
      • 2019-11
      • 2019-10
      • 2019-09
      • 2019-08
  • 🤔อ่านเรื่องไรดี ?
  • มือใหม่หัดเขียนโค้ด
    • 👶เขียนโค้ดด้วยภาษา C#
      • เกิดมาไม่เคยเขียนโค้ดมาก่อนเบย
      • 👶พื้นฐาน
        • 1.โปรแกรมที่ต้องลง
        • 2.โครงสร้างของโค้ด
        • 3.ชนิดของข้อมูล
        • 4.การสร้างตัวแปร
        • 5.คำสั่งพื้นฐาน
        • 6.การแปลงข้อมูล
        • 7.การเปรียบเทียบค่า
        • 8.การตัดสินใจด้วย IF statements
        • 9.การตัดสินใจด้วย Switch statements
        • 10.การทำงานซ้ำๆด้วย While
        • 11.การทำงานซ้ำๆด้วย Do While
        • 12.การทำงานซ้ำๆด้วย For
        • 13.การแก้โจทย์จากรูป
        • 14.มารู้จักกับ Array กัน
      • 🧑ระดับกลาง
        • 15.Value type vs Reference type
        • 16.ลดงานซ้ำๆด้วย Method
        • 17.มารู้จักกับ Class & Field กัน
        • 18.มารู้จักกับ Constructor กันบ้าง
        • 19.มาเขียน Method ใน Class กัน
        • 20.มารู้จักกับ Property กัน
        • 21.ลองใช้คลาสแบบจริงจังบ้าง
        • 22.การสืบทอด Inheritance
        • 23.Polymorphism
        • 24.Abstract Class
        • 25.Interface
        • 26.Namespace
        • 27.Enum
        • 28.Exception handler
        • 29.ลงลึกกับ string
        • 30.StringBuilder เพื่อนคู่ string
      • 👨⏳ระดับสูง
        • Generic
        • Delegates
        • Action & Func
        • Lambda expression
        • LINQ
        • พระคัมภีร์การใช้คำสั่ง LINQ
      • 💡Tips
        • 💡C# version 8.0
        • 💡Boxing & Unboxing
    • 👶Algorithm
      • 👾Algorithm Big-O
      • 👽Algorithm P & NP
    • 👦OOP
      • 💖Abstraction
      • 💖Encapsulation
      • 🏆Abstraction & Encapsulation
      • 💖Inheritance
      • 💖Polymorphism
      • 🏆Inheritance & Polymorphism
      • 📝ลองเขียน OOP ดูดิ๊
      • 👑OOP + Power of Design
      • 🥰เทคนิคในการออกแบบ
    • 👶บทสรุปฐานข้อมูล
      • เก็บรูปในฐานข้อมูล
      • Database indexing
      • การลบข้อมูล
    • 👦Communication Patterns
    • 👦Design Patterns
      • 🤰Creational Patterns
        • 🏭Factory Method
        • 🏭Abstract Factory
        • ☝️ Singleton Pattern
        • 🏗️ Builder Pattern
        • 🎎Prototype Pattern
      • 🧱Structural Patterns
        • 🔌Adapter Pattern
        • 📪Proxy Pattern
  • Puzzle
    • 🧠Challenges
      • 🐴Google ม้า 25 ตัว
      • 🌉Amazon เสา 2 ต้น
      • 🥇ทองเก๊
      • 💊ยาต้านโควิด
      • 🎩CP หมวก 5 ใบ
      • 🧓Einstein's Riddle 01
  • พื้นฐานที่ควรต้องรู้
    • 🐳Docker
      • 📦Docker Containers
      • 🃏Docker Exercise 01
      • 🛠️ Docker Tools
      • 🗃️ Docker Registry
      • 🖼️ Container Image
      • 📢Docker Push
      • 🔄WSL
    • 👶Clean Code
      • 🧓Uncle Bob - Clean Code
      • 🧓Uncle Bob - Comments
      • 🧓Uncle Bob - Naming
      • 🧓Uncle Bob - Mindset
      • 🧓Uncle Bob - TDD
    • 👶Code Smells
    • 👶สิ่งที่คนเขียนโค้ดมักเข้าใจผิด
    • 👶AI พื้นฐาน
    • 👶Git พื้นฐาน
      • Git branching strategy
    • 👶Cloud พื้นฐาน
    • 👶UML พื้นฐาน
      • Activity Diagram
      • Class Diagram
      • Sequence Diagram
      • Use case Diagram
      • บทสรุปการใช้ UML
    • 👶Data Scientist
      • การเลือก Algorithms ให้ AI (1/5)
      • การเตรียมข้อมูลให้ AI (2/5)
      • หลักการตั้งคำถามให้ AI (3/5)
      • แฉความลับของ AI Model (4/5)
      • หัดเขียน AI จาก AI ของคนอื่น (5/5)
    • 👶DevOps พื้นฐาน
    • 👶Docker ขั้นพื้นฐาน
      • Image and Container
      • แชร์ Docker Image ที่สร้างไว้
    • 👶Microservices พื้นฐาน
      • Microservices ที่ดีมีลักษณะยังไง
      • Microservices Tips
      • จาก Monolith สู่ Microservices
    • 👶ความรู้พื้นฐานในการทำเว็บ
    • 👦Bottlenecks of Software
      • หัวใจที่สำคัญที่สุดของฐานข้อมูล
    • 👦Agile Methodology
      • Agile in a Nutshell
      • Software Development Life Cycle
      • Code Review
    • 👦Security พื้นฐาน
      • การเก็บรหัสผ่านที่ถูกต้อง
      • Security in actions
        • Hash function
      • Security Principles
      • 😎The Matrix 1
      • 😎The Matrix 2
      • HTTPS in a nutshell
    • 👦SOLID Design Principles
      • มารู้จักกับ SOLID กันดีกว่า
      • Single-Responsibility Principle
      • Open/Closed Principle
      • Liskov Substitution Principle
      • Interface Segregation Principle
      • Dependency-Inversion Principle
  • Cloud Computing
    • 👶Microsoft Azure 101
      • สมัคร Microsoft Azure
      • รู้จักกับ Resource Groups
      • สร้างเว็บตัวแรกกัน
      • สร้าง Virtual Machine กัน
      • ประเภทของคลาว์เซอร์วิส
      • มาสร้าง Logic App กัน
      • มาสร้าง Function App กัน
      • คลาว์คิดเงินยังไง ?
      • Cloud Native
      • Guideline for Cloud scaling
      • Auto Scaling
    • 👶Azure App Services
    • 👶App Service Plan
    • 👶Azure Storage
      • Blob storage
        • ลองสร้างที่เก็บไฟล์กันเลย
        • เข้าใจ Blob storage ให้มากขึ้น
        • ลองเขียนโค้ดอัพโหลดไฟล์กันบ้าง
        • สร้างเว็บจากที่ฝากไฟล์บนคลาว์
    • 👶Azure Bot Service
      • Bot เข้าใจเราได้ยังไงกันนะ
    • 👶Azure Cognitive Services
      • การสร้าง Cognitive Services
      • การ Login ด้วยใบหน้า
      • อ่านลายมือจากรูปเป็นตัวอักษร (OCR)
      • เขียน AI แยกของต่างๆทำยังไง?
      • เขียนแอพ ทายอายุ บอกเพศ ง่ายจิ๊ดเดียว
      • เขียนแอพให้ AI อธิบายรูปเป็นภาษาคน
    • 👶Machine Learning Studio
      • มาสร้าง AI ของแท้ตัวแรกของเรากัน
      • สร้าง AI ตัดสินใจอนุมัติบัตรเครดิต 💳
      • ลองเรียกใช้ AI ของเรากัน
    • 👶Azure Service Fabric
      • สร้าง Service Fabric กัน
    • 👶Blockchain
      • Blockchain ทำงานยังไง ?
      • Consensus Algorithm คืออะไร ?
      • สร้าง Blockchain ใช้เองกัน !
      • หัดเขียน Smart Contract กัน
    • 👶Power BI
    • 👶Azure Web App
      • เซิฟเวอร์บนคลาว์ ราคา? ต่าง?
    • 👶Azure DevOps
      • เล่น Azure DevOps กัน
      • เล่นกับ Repository
      • ลองทำ Continuous Integration (CI)
      • ลองทำ Continuous Delivery (CD)
      • เล่น Kanban Board
    • 🤠Cloud Playground
      • การป้องกันความลับหลุดตอนที่ 1
      • การป้องกันความลับหลุดตอนที่ 2
      • การป้องกันความลับหลุดตอนที่ 3
      • การป้องกันความลับหลุดตอนจบ
  • Software Testing
    • 👦Test-First Design
    • 👦Test-Driven Development
      • 1.มารู้จักกับ TDD กันดีกว่า
      • 2.Test cases เขาเขียนกันยังไงนะ
      • 3.เครื่องมือในการทดสอบ
      • 4.การใช้ Theory และ InlineData
      • 5.โค้ดที่ทดสอบได้
      • 6.Mantra of TDD
      • 7.Functional & None-Functional testing
      • 8.Manual vs Automation testing
      • 9.Automation Frameworks in .NET
      • 10.Mock Framework
      • 11.มาเรียนการใช้ Moq กันเถอะ
      • 12.สรุป
  • Web
    • 👦Web API
      • 1.Web API คืออะไร
      • 2.ติดตั้ง .NET Core SDK
      • 3.สร้าง Web API ตัวแรกกัน
      • 4.Verbs
      • 5.Swagger เพื่อคู่ API
      • 6.การใช้ Model
      • 7.เรียก Web API ผ่าน Postman
      • 8.มาจัดกลุ่ม API กัน (1/2)
      • 9.มาจัดกลุ่ม API กัน (2/2)
  • Software Design
    • 🤴Design Patterns
      • 🦈Creational patterns
        • Abstract Factory
        • Builder
        • Factory Method
        • Prototype
        • Singleton
      • 🦈Structural patterns
        • Adapter
        • Bridge
        • Decorator
        • Facade
        • Proxy
      • 🦈Behavioral patterns
        • Chain of Responsibility
        • Command
        • Iterator
        • Mediator
        • Memento
        • Observer
        • State
        • Strategy
        • Template Method
        • Visitor
Powered by GitBook
On this page
  • 😥 ปัญหา
  • 😉 วิธีการแก้ปัญหา
  • 😅 อยากทำเป็นอ่ะ
  • 😎 Hash Functions
  • 🤔 โค้ดเขียนยังไง?

Was this helpful?

Export as PDF
  1. พื้นฐานที่ควรต้องรู้
  2. Security พื้นฐาน
  3. Security in actions

Hash function

😘 ลองเปลี่ยนข้อความธรรมดาให้เป็นฟามลับกันมุ้ย

PreviousSecurity in actionsNextSecurity Principles

Last updated 3 years ago

Was this helpful?

อะไรก็ตามแต่ที่เกี่ยวกับการทำ Computer Security นั้น เรามักจะเปลี่ยนของธรรมดาให้เป็นความลับเสมอ เพื่อป้องกันไม่ให้คนร้ายแอบเอาไปใช้ได้ แต่คำถามแรกของเราคือ เราจะเปลี่ยนของพวกนั้นให้เป็นความลับได้ยังไงดีหว่า? 🤔

แนะนำให้อ่าน บทความนี้เป็นส่วนหนึ่งของคอร์ส ถ้าเพื่อนๆสนใจอยากรู้หลักในการรักษาความปลอดภัยตั้งแต่เริ่มต้นเลย ก็กดอ่านที่ตัวสีฟ้าๆได้เลยนะ

😥 ปัญหา

ดช.แมวน้ำ เชื่อว่าเราทุกคนมีฟามลับที่ไม่อยากให้คนอื่นรู้กันหมดนั่นแหละ เช่น รหัสบัตรเครดิต/เดบิต รหัสผ่านอีเมล์ รหัสปลดล็อคมือถือ หรือพูดง่ายๆคือ รหัสผ่านต่างๆ นั่นเอง ซึ่งปรกตินั้นจะมีแค่เราเท่านั้นที่รู้รหัสลับพวกนั้นชิมิ? แต่ถ้าเราคิดดูดีๆก็จะพบว่า ยังมีอีกคนที่รู้รหัสลับของเราด้วย นั่นก็คือผู้ให้บริการของเรายังไงล่ะ เช่น เหล่าธนาคารเจ้าของบัตรเครดิต/เดบิต ผู้ให้บริการอีเมล์ต่างๆ หรือตัวมือถือเองที่รู้รหัสปลดล็อคจอมือถือ (ถ้าผู้ให้บริการไม่รู้รหัสลับของเราแล้วเขาจะรู้ได้ไงว่าเราใส่รหัสลับถูก 🤣)

จากที่ว่ามานั่นหมายความว่า สมมุติว่าเราเก็บความลับได้ดีฝุดๆ แต่ผู้ให้บริการโดน hack ระบบเสียเอง ความลับของเราก็จะไม่เป็นความลับอีกต่อไปอ่ะจิ ซึ่งเราในฐานะ Programmer ซึ่งมีหน้าที่เขียนโค้ดเพื่อป้องกันเรื่องเหล่านี้ จะรับมือกับการที่ถูก hack ได้ยังไงดีนะ? ... หรือต่อให้ไม่ถูก hack ก็ได้ แค่เราหรือเพื่อนร่วมงานเข้าไปอ่านข้อมูลใน database แล้วเห็น password ผู้ใช้ในระบบได้ ก็ถือว่าระบบเราตกเรื่อง Security เรียบร้อยแบ้ว!!

🤠 เรื่องนี้มีวิธีการป้องกันเยอะม๊วก ไม่ว่าจะเป็นระดับ Hardware, Software, Peopleware, Network บลาๆ แต่สิ่งที่เป็นขั้นต่ำที่สุดและมีประสิทธิภาพที่สุดคือจุดที่เราเขียนโค้ดนี่แหละ เพราะการป้องกันระดับอื่นๆเป็นการกันแค่เปลือกเท่านั้น สุดท้ายถ้าคนร้าย หรือ เรานี่แหละเป็นคนร้าย สามารถเข้าถึงความลับได้ก็จบกันถ้าเราไม่ได้ป้องกันเอาไว้ (แล้วจะป้องกันยังไงให้แม้แต่คนเขียนเองก็โกงระบบตัวเองไม่ได้หว่า?)

ถ้าอยากเห็นภาพมากขึ้นลองไปอ่าน ที่ป๋มได้เขียนไว้ได้นะ

😉 วิธีการแก้ปัญหา

เราก็แค่ทำให้ ความลับไม่สามารถเอาไปใช้งานได้ตรงๆ ก็เพียงพอแล้ว เช่น สมมุติว่าเราเก็บ Username & Password ของคนในระบบเป็นแบบด้านล่าง เมื่อคนร้ายเข้าถึงข้อมูลนี้ได้ เขาก็จะรู้เลยว่าทุกคนใช้รหัสผ่านอะไรชิมิ

Id

Username

Password

1

saladpuk

1234

2

thaksin

homesick

3

prayut

1234

ซึ่งเมื่อเรานำหลัก Security เข้ามาใช้ เราก็จะเปลี่ยนให้ความลับไม่สามารถเอาไปใช้งานได้ตรงๆ ก็จะทำให้ข้อมูลเราเปลี่ยนเป็นราวๆนี้

Id

Username

Password

1

saladpuk

fd4438f5b856bb685004b84221ba794b

2

thaksin

f679b30fde31dff10304dc357300c52b

3

prayut

3d54cf99f817a21cd9fd2b7218e58fec

จะเห็นว่าตารางอันใหม่ด้านบนนั้น เราได้แปลงรหัสผ่านทุกคนเป็นอย่างอื่นไปเรียบร้อยแล้ว ซึ่งผู้ใช้ทุกคนก็ยังคงสามารถใช้รหัสผ่านอันเดิมเข้าสู่ระบบได้เหมือนเดิม แถมคนที่สร้างระบบก็ไม่สามารถรู้ได้ว่ารหัสผ่านแต่ละคนคืออะไร และจะเห็นว่าผู้ใช้ saladpuk และ prayut ที่ใช้รหัสผ่านเดียวกัน พอดูในตารางใหม่เราก็ไม่สามารถเดาได้เลยว่าเขาใช้รหัสผ่านเดียวกันด้วย

😅 อยากทำเป็นอ่ะ

(ในบทความนี้จะขอสอนแค่ Hash ตัวเดียวก่อนนะ ส่วนตัวอื่นๆจะเป็นบทความถัดไป)

😎 Hash Functions

  • การทำ Hash เป็นการแปลงข้อความธรรมดาให้เป็นข้อความอื่นที่มีความยาวเท่ากันเสมอ

  • ผลลัพท์ที่ได้ไม่สามารถคำนวณย้อนกลับเพื่อไปหาว่าข้อความจริงๆคืออะไรได้

  • ข้อความตั้งต้นเหมือนกันจะได้ผลลัพท์เดียวกันเสมอ

  • ข้อความตั้งต้นต่างกันบางทีก็อาจจะได้ผลลัพท์เดียวกัน

เมื่อเข้าใจภาพรวมคร่าวๆของ Hash functions แล้ว ทีนี้ก็อย่างที่บอกว่ามันมีให้เราเลือกใช้หลายตัวเลย เช่น MD5, SHA-1, SHA-256, SHA-384, SHA-512 บลาๆ

🤔 โค้ดเขียนยังไง?

ข้อความ 3 ตัวที่ไม่เหมือนกัน (ตัวเล็กตัวใหญ่ถือว่าต่างกันนะจ๊ะ)

var plainText1 = "Hello world";
var plainText2 = "hello world";
var longestText = "This is the longest text ever";

สร้าง Method ที่ใช้ในการเข้ารหัส Hash

static string GetHashedText(string text, HashAlgorithm algorithm)
{
	var byteText = Encoding.UTF8.GetBytes(text);
	var byteResult = algorithm.ComputeHash(byteText);
	return string.Join(string.Empty, byteResult.Select(it => it.ToString("X2")));
}

ทดลองเข้ารหัสข้อความทั้ง 3 ผ่าน Hash แต่ละแบบ

Console.WriteLine("MD5");
using var md5 = MD5.Create();
Console.WriteLine(GetHashedText(plainText1, md5));
Console.WriteLine(GetHashedText(plainText2, md5));
Console.WriteLine(GetHashedText(longestText, md5));

Console.WriteLine("\nSHA-1");
using var sha1 = SHA1.Create();
Console.WriteLine(GetHashedText(plainText1, sha1));
Console.WriteLine(GetHashedText(plainText2, sha1));
Console.WriteLine(GetHashedText(longestText, sha1));

Console.WriteLine("\nSHA-256");
using var sha256 = SHA256.Create();
Console.WriteLine(GetHashedText(plainText1, sha256));
Console.WriteLine(GetHashedText(plainText2, sha256));
Console.WriteLine(GetHashedText(longestText, sha256));

Console.WriteLine("\nSHA-512");
using var sha512 = SHA512.Create();
Console.WriteLine(GetHashedText(plainText1, sha512));
Console.WriteLine(GetHashedText(plainText2, sha512));
Console.WriteLine(GetHashedText(longestText, sha512));

ผลลัพท์

MD5
3E25960A79DBC69B674CD4EC67A72C62
5EB63BBBE01EEED093CB22BB8F5ACDC3
13988F9767E8BADB3E8D98F3A7FD83F6
3E25960A79DBC69B674CD4EC67A72C62

SHA-1
7B502C3A1F48C8609AE212CDFB639DEE39673F5E
2AAE6C35C94FCFB415DBE95F408B9CE91EE846ED
F44FDE2EB97F456F4F7A11B2D96FB6923900E406

SHA-256
64EC88CA00B268E5BA1A35678A1B5316D212F4F366B2477232534A8AECA37F3C
B94D27B9934D3E08A52E52D7DA7DABFAC484EFE37A5380EE9088F7ACE2EFCDE9
756A8392F0F9F4103E9909A508EC8722FB061D81512C59060BEBE6145E57BE0A

SHA-512
B7F783BAED8297F0DB917462184FF4F08E69C2D5E5F79A942600F9725F58CE1F29C18139BF80B06C0FFF2BDD34738452ECF40C488C22A7E3D80CDF6F9C1C0D47
309ECC489C12D6EB4CC40F50C902F2B4D0ED77EE511A7C7A9BCD3CA86D4CD86F989DD35BC5FF499670DA34255B45B0CFD830E81F605DCF7DC5542E93AE9CD76F
ABA075B7537FD45343B98619C9EE5B116F9D2C43348033C249EE6DEFBB8F85DE854D7B6A63CF4365830A2A6F4EA4DF496163701FCC54D4EA41D54C83826E501F

จะเห็นว่าไม่ว่าจะ run กี่ครั้ง เราก็จะได้ผลลัพท์เดิมเสมอ และทุกอย่างก็จะเป็นตามกฎทั้ง 4 ข้อตามที่เคยบอกไว้ และความต่างๆของการเข้า Hash แต่ละแบบก็จะเห็นว่า ยิ่งเลขเยอะมันก็จะได้ผลลัพท์ที่ยาวขึ้น เช่น SHA256 ก็จะสั้นกว่า SHA512 นั่นก็เพราะว่าเลขที่อยู่ด้านหลังนั้นเป็นตัวบอกว่า algorithm นั้นๆมีขนาดเท่าไหร่นั่นเองขอรับ เลขยิ่งเยอะยิ่งป้องกันได้ดี แต่ก็ต้องแลกมากับเวลาในการประมวลผลเช่นกัน ดังนั้นเราต้อง balance มันว่าแต่ละเรื่องควรจะใช้ขนาดไหนถึงจะเหมาะสมนั่นเองฮ๊าฟ (ณ วันที่เขียนบทความนี้ SHA256 ถือว่าเป็นตัวที่ถูกแนะนำให้ใช้ แต่ในอนาคตก็ไม่แน่ผ่านไปอีกซักไม่กี่ปีก็อาจจะถือว่าไม่ปลอดภัยแล้วก็ได้ 😂)

อะเชก็ถือว่าจบไปแล้วสำหรับ Hash เดี๋ยวถัดไปเราจะมาดูตัวที่มีความปลอดภัยมากกว่า Hash บ้างนั่นก็คือ HMAC กั๊ฟป๋ม 😎

การที่เราจะทำเรื่องนี้ได้แบบถูกหลักจะทำให้ระบบเรามีความปลอดภัยสูงขึ้น ซึ่งเราต้องอาศัยความรู้พื้นฐานที่เรียกว่าการทำ กับ และถ้าจะให้ดีควรรู้เรื่องการทำ กับ ด้วย ซึ่งกระป๋มได้เล่านิธานเพื่อให้เข้าใจง่ายๆแล้วในบทความ กับ ถ้าสนใจก็ไปอ่านต่อได้กั๊ฟ

การที่เราจะ เปลี่ยนข้อความธรรมดาเป็นข้อความลับ นั้นมีหลายวิธี ซึ่งแต่ละวิธีก็มีหลาย Algorithms ให้เราเลือกใช้เลย โดยในรอบนี้ตัวพื้นฐานที่เราจะมามาเป็นพระเอกของเราคือเจ้าตัวที่ชื่อว่า Hash นั่นเองกั๊ฟ ซึ่งรายละเอียดของมันรบกวนเพื่อนไปอ่านต่อที่บทความนี้นะ ตรงนี้แมวน้ำขอสรุปแบบย่อๆไว้ละกันว่า

เกร็ดความรู้ พวก Security ในสมัยก่อนนั้นเกิดมาตอนที่คอมพิวเตอร์ไม่ได้เร็วมากเท่าปัจจุบัน แต่หลังๆมานี้มือถือที่เราใช้อยู่ก็มีความเร็วมากกว่า Super Computer ในอดีตแบบขาดลอยแล้ว เลยทำให้ Security บางตัวถือว่าไม่ปลอดภัยแล้วในปัจจุบัน เช่น MD5 เป็นต้น ดังนั้นเราควรอัพเดทเรื่อง Security บ่อยๆว่าปัจจุบันเขาแนะนำตัวไหนเป็นขั้นต่ำสุดนั่นเองกั๊ฟ เพราะปัจจุบันคอมพิวเตอร์เป็นไปตามกฎ อยู่

ตามที่เคยบอกไปว่า แต่ละภาษาจะมี library เฉพาะทางของมันเอง เช่นในฝั่งของ .NET ก็จะอยู่ใน ซึ่งเรามีให้เลือกใช้คือ , , , , , ... (ไปดูเองเยอะม๊วก 😭 ) โดยในรอบนี้แมวน้ำจะลองเอาข้อความ 3 ข้อความที่ไม่เหมือนกัน ไปเข้ารหัสผ่าน MD5, SHA1, SHA256 และ SHA512 ดูว่าผลลัพท์มันจะเป็นยังไงกันบ้างนะ ตามโค้ดด้านล่างนี้เบย

เกลียด ชอบ ถูกใจ อยากติดตาม อยากติชมแนะนำด่าทอ หรืออะไรก็แล้วแต่ (ห้ามมายืมเงิน) จิ้มลงมาที่เพจนี้ได้เลย และจะเป็นประคุณอันล้นพ้นถ้ากด Like + Follow + Share ให้ด้วยขอรับ น้ำตาจิไหล 🥺

👦
👦 Security พื้นฐาน
🦉 นิทานเรื่องที่สอง
Hash
HMAC
Salt
Pepper
🦉 นิทานเรื่องแรก
🦉 นิทานเรื่องที่สอง
💔 จดหมายถูกแก้ไข
Moore's law
System.Security.Cryptography
SHA1
SHA1CryptoServiceProvider
SHA1Manged
SHA256
SHA256CryptoServiceProvider
Mr.Saladpuk