លំហសិក្សាកម្ពុជា
V1.0
មេរៀនទី ៤ នេះណែនាំនិស្សិតអំពីគោលគំនិតសំខាន់មួយរបស់ Blockchain គឺ Hashing។ បន្ទាប់ពីមេរៀនទី៣ ដែលនិស្សិតបានរៀនពី Console Menu និង CSV File Handling មេរៀននេះបន្តទៅការប្រើ Hash ដើម្បីពិនិត្យភាពត្រឹមត្រូវនៃទិន្នន័យ។ Hash អាចយល់បានថាជា “ស្នាមម្រាមដៃឌីជីថល” របស់ទិន្នន័យ។ ទិន្នន័យដូចគ្នានឹងបង្កើត Hash ដូចគ្នា ប៉ុន្តែបើកែតែអក្សរមួយ Hash នឹងផ្លាស់ប្តូរខ្លាំង។ ក្នុងមេរៀននេះ និស្សិតនឹងប្រើ Python hashlib ដើម្បីបង្កើត SHA-256 hash សម្រាប់អត្ថបទធម្មតា Certificate Record និង CSV Data។ Python Documentation បង្ហាញថា hashlib ផ្ដល់ interface សម្រាប់ secure hash និង message digest algorithms រួមទាំង SHA-256 [1]។ NIST Secure Hash Standard កំណត់លក្ខណៈស្តង់ដាររបស់ SHA-256 ដែលមាន message digest size 256 bits [2]។ មេរៀននេះជាមូលដ្ឋានសំខាន់មុនទៅកាន់ Block Hash, Previous Hash, Blockchain Validation និង Tamper Detection។
| ចំណុច | ព័ត៌មាន |
|---|---|
| មុខវិជ្ជា | Blockchain Technology Using Python Console and CSV |
| មេរៀន | មេរៀនទី ៤ |
| ចំណងជើង | Hashing and Data Integrity |
| ប្រធានបទសំខាន់ | SHA-256 Hashing, Certificate Hash, Data Integrity, Hash Comparison |
| កម្រិតនិស្សិត | Beginner to Intermediate |
| ភាសាសរសេរកម្មវិធី | Python |
| ប្រភេទកម្មវិធី | Console Application |
| ឧបករណ៍ប្រើប្រាស់ | Python, VS Code, Terminal / Command Prompt, CSV file |
| Python Modules | hashlib, json, csv |
| លទ្ធផលរំពឹងទុក | និស្សិតអាចបង្កើត Hash សម្រាប់ Certificate Record និងពិនិត្យការផ្លាស់ប្តូរទិន្នន័យ |
| ទិសដៅ Project | Console-Based Blockchain Student Certificate Verification System |
បន្ទាប់ពីបញ្ចប់មេរៀននេះ និស្សិតគួរអាច៖
hashlib ដើម្បីបង្កើត SHA-256 hash។
json.dumps() ដើម្បីបម្លែង Dictionary ទៅជា string មុនធ្វើ Hash។
ក្នុងមេរៀនទី ៣ និស្សិតបានបង្កើតកម្មវិធី Certificate CSV Manager ដែលអាច Add, Show និង Search Certificate Records។ ប៉ុន្តែការរក្សាទុកទិន្នន័យក្នុង CSV មិនទាន់គ្រប់គ្រាន់សម្រាប់ Blockchain ទេ ព្រោះ CSV អាចត្រូវបានបើក និងកែប្រែដោយដៃបាន។ ដូច្នេះយើងត្រូវការវិធីសាស្ត្រមួយសម្រាប់បង្កើតភស្តុតាងថា ទិន្នន័យមិនត្រូវបានកែប្រែ។ វិធីសាស្ត្រនោះគឺ Hashing។
Flow របស់មេរៀនទី៤គឺ៖
Certificate Record
↓
Convert to Consistent Text / JSON
↓
Generate SHA-256 Hash
↓
Save Hash as Digital Fingerprint
↓
Change Data
↓
Generate New Hash
↓
Compare Old Hash and New Hash

រូបភាពនេះគួរបង្ហាញថា Certificate Record មួយត្រូវបានបម្លែងទៅជា text ឬ JSON string ហើយបន្ទាប់មកត្រូវបានបញ្ចូលទៅក្នុង SHA-256 Hash Function ដើម្បីបង្កើត Hash Value។ Hash Value នេះអាចប្រើជាស្នាមម្រាមដៃឌីជីថលរបស់ Certificate Record។
Hash គឺជាលទ្ធផលដែលបានពី Hash Function។ Hash Function ទទួលទិន្នន័យមួយចំនួន ហើយបម្លែងវាទៅជា output ដែលមានប្រវែងថេរ។ ក្នុង SHA-256 output មានទំហំ 256 bits ឬជាទូទៅបង្ហាញជា hexadecimal string ប្រវែង 64 តួអក្សរ។ NIST FIPS 180-4 បង្ហាញថា SHA-256 មាន message digest size 256 bits [2]។
ឧទាហរណ៍៖
Input: Hello Hash: 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
បើកែពី Hello ទៅជា hello Hash នឹងខុសគ្នាខ្លាំង។ នេះបង្ហាញថា Hash មានលក្ខណៈ sensitive ចំពោះការផ្លាស់ប្តូរទិន្នន័យ។
| លក្ខណៈ | ការពន្យល់ |
|---|---|
| Fixed length | ទោះ input វែង ឬខ្លី output មានប្រវែងថេរ |
| Deterministic | ទិន្នន័យដូចគ្នា បង្កើត Hash ដូចគ្នា |
| Sensitive to change | កែតែអក្សរមួយ Hash ក៏ផ្លាស់ប្តូរ |
| One-way | មិនអាចយក Hash ត្រឡប់ទៅរកទិន្នន័យដើមបានងាយ |
| Useful for integrity | អាចប្រើពិនិត្យថាទិន្នន័យត្រូវបានកែ ឬអត់ |

រូបភាពនេះគួរបង្ហាញថា Hash មានតួនាទីដូចស្នាមម្រាមដៃឌីជីថលរបស់ទិន្នន័យ។ ទិន្នន័យដូចគ្នាបង្កើត Hash ដូចគ្នា ប៉ុន្តែទិន្នន័យដែលត្រូវបានកែបន្តិចនឹងបង្កើត Hash ខុសគ្នា។ គំនិតនេះជាមូលដ្ឋានសម្រាប់ Data Integrity និង Tamper Detection។
SHA-256 មានន័យថា Secure Hash Algorithm 256-bit។ វាជាផ្នែកមួយនៃគ្រួសារ SHA-2។ SHA-256 ត្រូវបានប្រើក្នុងប្រព័ន្ធសុវត្ថិភាពជាច្រើន រួមទាំង Blockchain ដើម្បីបង្កើត Hash សម្រាប់ទិន្នន័យ។ NIST Secure Hash Standard គឺជាស្តង់ដារដែលកំណត់ SHA algorithms សម្រាប់ការបង្កើត message digest [2]។
ក្នុង Python យើងអាចប្រើ hashlib.sha256() ដើម្បីបង្កើត SHA-256 hash។ Python hashlib documentation បង្ហាញឧទាហរណ៍ការបង្កើត hash object ដោយប្រើ hashlib.sha256() [1]។
hashlibimport hashlib text = "Hello Blockchain" hash_value = hashlib.sha256(text.encode("utf-8")).hexdigest() print("Text:", text) print("SHA-256 Hash:", hash_value)
import hashlib នាំចូល module សម្រាប់ hashing។
text.encode("utf-8") បម្លែង string ទៅ bytes ព្រោះ hash function ត្រូវការទិន្នន័យជា bytes។
hashlib.sha256(...) បង្កើត SHA-256 hash object។
.hexdigest() បង្ហាញ hash ជា hexadecimal string។
Text: Hello Blockchain SHA-256 Hash: 5f1e...
Hash ដែលបានបង្ហាញអាចខុសទៅតាម input ពិតប្រាកដ។ ចំណុចសំខាន់គឺ input ដូចគ្នា នឹងបង្កើត hash ដូចគ្នា។
បង្កើតកម្មវិធី Console មួយដែលទទួលអត្ថបទពីអ្នកប្រើប្រាស់ ហើយបង្ហាញ SHA-256 hash។
import hashlib def generate_hash(text): return hashlib.sha256(text.encode("utf-8")).hexdigest() user_input = input("Enter text to hash: ") hash_value = generate_hash(user_input) print("Original Text:", user_input) print("SHA-256 Hash:", hash_value)
Function generate_hash() ទទួល text មួយ ហើយបង្កើត SHA-256 hash។ ការប្រើ Function ជួយឱ្យយើងអាចប្រើ hashing logic ម្តងហើយម្តងទៀតនៅក្នុង Project។

រូបភាពនេះគួរបង្ហាញ Console ដែលអ្នកប្រើប្រាស់បញ្ចូលអត្ថបទ ហើយ Python Program បង្ហាញ SHA-256 hash។ វាជួយឱ្យនិស្សិតយល់ថា Hashing អាចចាប់ផ្ដើមពីកម្មវិធី Console សាមញ្ញមួយ។
ក្នុង Project របស់យើង យើងមិនត្រឹមតែ Hash អត្ថបទធម្មតាទេ។ យើងត្រូវ Hash Certificate Record ដែលជា Dictionary។ ប៉ុន្តែ Hash Function មិនទទួល Dictionary ដោយផ្ទាល់ទេ។ ដូច្នេះយើងត្រូវបម្លែង Dictionary ទៅជា string មុន។
យើងប្រើ json.dumps() ដើម្បីបម្លែង Dictionary ទៅជា JSON string។ Python JSON documentation បញ្ជាក់ថា json.dumps() អាច serialize object ទៅជា JSON formatted string ហើយ parameter sort_keys=True នឹង sort dictionary keys ដើម្បីឱ្យ output មានលំដាប់ថេរ [3]។
import hashlib import json def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() certificate = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" } certificate_hash = generate_hash(certificate) print("Certificate Data:", certificate) print("Certificate Hash:", certificate_hash)
sort_keys=True?ប្រសិនបើ Dictionary មាន key order ខុសគ្នា JSON string អាចខុសគ្នា ហើយ Hash អាចខុសគ្នា។ ដូច្នេះ sort_keys=True ជួយធ្វើឱ្យ key order មានលំដាប់ថេរ។
បង្កើត Certificate Hash សម្រាប់ Certificate Record មួយ។
import hashlib import json def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() def create_certificate(): certificate = { "certificate_id": input("Certificate ID: "), "student_name": input("Student Name: "), "program": input("Program: "), "certificate_title": input("Certificate Title: "), "issue_date": input("Issue Date: "), "status": input("Status Valid/Invalid/Revoked: ") } return certificate certificate = create_certificate() certificate_hash = generate_hash(certificate) print("\n=== Certificate Record ===") print(certificate) print("\nCertificate Hash:") print(certificate_hash)
create_certificate() ទទួល Certificate Data ពីអ្នកប្រើប្រាស់។
generate_hash() បង្កើត Hash សម្រាប់ Certificate Dictionary។

រូបភាពនេះគួរបង្ហាញពី Certificate Data ដែលត្រូវបានបញ្ចូលទៅក្នុង Hash Function ហើយបង្កើត Certificate Hash។ វាជួយឱ្យនិស្សិតយល់ថា Certificate Hash គឺជាភស្តុតាងបច្ចេកទេសមួយសម្រាប់ពិនិត្យថា Certificate Record ត្រូវបានកែប្រែឬអត់។
Data Integrity មានន័យថា ទិន្នន័យនៅតែត្រឹមត្រូវ ពេញលេញ និងមិនត្រូវបានកែប្រែដោយគ្មានការអនុញ្ញាត។ ក្នុង Certificate Verification System Data Integrity សំខាន់ណាស់ ព្រោះ Certificate Record ត្រូវតែមានភាពត្រឹមត្រូវ។
ឧទាហរណ៍៖
Original Student Name: Sok Dara Changed Student Name: Sok Daraa
ការបន្ថែមអក្សរ a តែមួយអាចបង្កើត Hash ខុសគ្នាទាំងស្រុង។ នេះជាមូលដ្ឋានសម្រាប់ Tamper Detection។
បង្ហាញថាការផ្លាស់ប្តូរទិន្នន័យតូចមួយអាចធ្វើឱ្យ Hash ផ្លាស់ប្តូរខ្លាំង។
import hashlib import json def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() original_certificate = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" } changed_certificate = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Daraa", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" } original_hash = generate_hash(original_certificate) changed_hash = generate_hash(changed_certificate) print("Original Hash:", original_hash) print("Changed Hash :", changed_hash) if original_hash == changed_hash: print("Data is the same.") else: print("Data has been changed.")
ក្នុងឧទាហរណ៍នេះ យើងបានកែ student_name ពី Sok Dara ទៅ Sok Daraa។ ទោះបីការកែតូចក៏ដោយ Hash នឹងខុសគ្នា។ នេះបង្ហាញថា Hashing អាចជួយរកឃើញការកែប្រែទិន្នន័យ។

រូបភាពនេះគួរបង្ហាញ Record ដើម និង Record ដែលត្រូវបានកែបន្តិច បន្ទាប់មកបង្ហាញថា Hash ទាំងពីរខុសគ្នា។ វាជួយឱ្យនិស្សិតយល់ថា Hashing ជាឧបករណ៍សំខាន់សម្រាប់ Data Integrity។
នៅមេរៀនទី៣ យើងបានបង្កើត certificates.csv។ នៅមេរៀនទី៤នេះ យើងអាចអាន Certificate Record ពី CSV ហើយបង្កើត Hash សម្រាប់ Record នីមួយៗ។
certificate_id,student_name,program,certificate_title,issue_date,status CERT-FDE-001,Sok Dara,Digital Economy,Blockchain Technology Completion,2026-08-25,Valid
import csv import hashlib import json CSV_FILE = "certificates.csv" def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() def hash_certificates_from_csv(): with open(CSV_FILE, "r", encoding="utf-8") as file: reader = csv.DictReader(file) for row in reader: certificate_hash = generate_hash(row) print("-----------------------------") print("Certificate ID:", row["certificate_id"]) print("Student Name:", row["student_name"]) print("Certificate Hash:", certificate_hash) hash_certificates_from_csv()
csv.DictReader(file) អាន CSV Row ជា Dictionary។
generate_hash(row) បង្កើត Hash សម្រាប់ Row នីមួយៗ។

រូបភាពនេះគួរបង្ហាញពី CSV File ដែលមាន Certificate Records ហើយ Python Program អាន Record នីមួយៗ ដើម្បីបង្កើត Hash។ វាជួយបង្ហាញថា CSV Storage និង Hashing អាចភ្ជាប់គ្នាបាន ដើម្បីបង្កើតមូលដ្ឋានសម្រាប់ Blockchain Project។
Tamper Detection មានន័យថា ប្រព័ន្ធអាចរកឃើញថា ទិន្នន័យត្រូវបានកែប្រែ។ Hashing មិនអាចការពារមិនឱ្យមនុស្សបើក CSV និងកែទិន្នន័យបានទេ ប៉ុន្តែវាអាចជួយឱ្យយើងដឹងថា ទិន្នន័យត្រូវបានកែប្រែ។
ឧទាហរណ៍៖

រូបភាពនេះគួរបង្ហាញដំណើរការ Tamper Detection ដោយប្រៀបធៀប Stored Hash និង Recalculated Hash។ ប្រសិនបើ Hash ទាំងពីរដូចគ្នា Data គឺ Valid។ ប្រសិនបើ Hash ខុសគ្នា Data ត្រូវបានកែប្រែ។
បង្កើតកម្មវិធីសាមញ្ញសម្រាប់ប្រៀបធៀប Hash ដើម និង Hash ថ្មី។
import hashlib import json def generate_hash(data): data_string = json.dumps(data, sort_keys=True) return hashlib.sha256(data_string.encode("utf-8")).hexdigest() certificate = { "certificate_id": "CERT-FDE-001", "student_name": "Sok Dara", "program": "Digital Economy", "certificate_title": "Blockchain Technology Completion", "issue_date": "2026-08-25", "status": "Valid" } stored_hash = generate_hash(certificate) print("Stored Hash:", stored_hash) certificate["status"] = "Revoked" new_hash = generate_hash(certificate) print("New Hash:", new_hash) if stored_hash == new_hash: print("Certificate data is valid.") else: print("Warning: Certificate data has been changed.")
ក្នុងកូដនេះ យើងបានបង្កើត Hash ដើមសម្រាប់ Certificate។ បន្ទាប់មកយើងកែ status ពី Valid ទៅ Revoked។ នៅពេលបង្កើត Hash ថ្មី វានឹងខុសពី Hash ដើម។ កម្មវិធីបង្ហាញ warning ថា Certificate Data ត្រូវបានកែប្រែ។
| គន្លឹះ | ការពន្យល់ |
|---|---|
| ប្រើ input ដូចគ្នា | Input ដូចគ្នា ទើប Hash ដូចគ្នា |
ប្រើ sort_keys=True | ធ្វើឱ្យ Dictionary key order ស្ថិតស្ថេរ |
| កុំបញ្ចូល space មិនចាំបាច់ | Space បន្ថែមអាចធ្វើឱ្យ Hash ខុស |
| ប្រើ UTF-8 encoding | ជួយបម្លែង text ទៅ bytes ឱ្យត្រឹមត្រូវ |
| រក្សាទុក Hash ដើម | ដើម្បីប្រៀបធៀបនៅពេលក្រោយ |
| កុំគិតថា Hash = Encryption | Hash មិនមែន Encryption ទេ |
និស្សិតខ្លះអាចច្រឡំថា Hash គឺ Encryption។ តាមពិតវាខុសគ្នា។
| Hashing | Encryption |
|---|---|
| One-way | Two-way |
| មិនអាចត្រឡប់ទៅទិន្នន័យដើមបានងាយ | អាច decrypt ត្រឡប់ទៅទិន្នន័យដើមបាន |
| ប្រើសម្រាប់ integrity | ប្រើសម្រាប់ confidentiality |
| ឧទាហរណ៍ SHA-256 | ឧទាហរណ៍ AES |
ក្នុង Project នេះ យើងប្រើ Hashing ដើម្បីពិនិត្យថា Certificate Data ត្រូវបានកែប្រែឬអត់ មិនមែនដើម្បីលាក់ទិន្នន័យទេ។
គ្រូអាចប្រើសំណួរខាងក្រោម៖
json.dumps() មុនធ្វើ Hash?
sort_keys=True មានសារៈសំខាន់?
សរសេរចម្លើយខ្លី ៥–៧ បន្ទាត់៖
តើ Hashing អាចជួយរក្សា Data Integrity ក្នុងប្រព័ន្ធ Certificate Verification បានយ៉ាងដូចម្តេច?
ចម្លើយគួររួមបញ្ចូលគំនិត៖
សរសេរកម្មវិធី Python ដែលទទួល text ពីអ្នកប្រើប្រាស់ ហើយបង្ហាញ SHA-256 hash។
បង្កើត Certificate Dictionary ដែលមាន Fields៖
certificate_id student_name program certificate_title issue_date status
បន្ទាប់មក Generate SHA-256 hash សម្រាប់ Certificate Dictionary នោះ។
បង្កើត Certificate Record ដើម និង Certificate Record ដែលបានកែ Student Name បន្តិច។ Generate Hash ទាំងពីរ ហើយប្រៀបធៀបថា Hash ដូចគ្នាឬខុសគ្នា។
ប្រើ certificates.csv ពីមេរៀនទី៣។ សរសេរកម្មវិធីអាន CSV ហើយ Generate Hash សម្រាប់ Record នីមួយៗ។
សរសេរតារាងខ្លីមួយប្រៀបធៀប Hashing និង Encryption។
សរសេរកម្មវិធីដែល៖
status ពី Valid ទៅ Revoked។
បង្កើតកម្មវិធី Python Console មួយឈ្មោះ៖
certificate_hash_checker.py
កម្មវិធីត្រូវមាន៖
generate_hash(data)
create_certificate()
compare_hashes(old_hash, new_hash)
Certificate data is valid.
Warning: Certificate data has been changed.
បន្ទាប់ពីបញ្ចប់មេរៀនទី៤ និស្សិតគួរមាន៖
hashlib ដើម្បីបង្កើត Hash។
json.dumps() សម្រាប់ Hashing Dictionary។
សូមបញ្ជាក់ថា Hashing គឺជាគំនិតសំខាន់បំផុតមួយក្នុង Blockchain។ ប្រសិនបើនិស្សិតមិនយល់ Hashing ពួកគេនឹងពិបាកយល់ Block Hash, Previous Hash និង Chain Validation នៅមេរៀនបន្ទាប់។
ការផ្លាស់ប្តូរ Hash ដោយផ្ទាល់ក្នុង Console។ ឧទាហរណ៍ បញ្ចូល Sok Dara ហើយបន្ទាប់មក Sok Daraa ដើម្បីឱ្យនិស្សិតឃើញថា Hash ខុសគ្នាទាំងស្រុង។ ការបង្ហាញលទ្ធផលជាក់ស្តែងនឹងធ្វើឱ្យនិស្សិតយល់លឿនជាងការពន្យល់ទ្រឹស្តីតែប៉ុណ្ណោះ។
| Figure | កន្លែងបញ្ចូល | គោលបំណង |
|---|---|---|
| Figure 1 | ផ្នែក ៣ | បង្ហាញ Certificate Record ទៅ SHA-256 Hash |
| Figure 2 | ផ្នែក ៤ | បង្ហាញ Hash ជា Digital Fingerprint |
| Figure 3 | ផ្នែក ៧ | បង្ហាញ Simple Hash Generator |
| Figure 4 | ផ្នែក ៩ | បង្ហាញ Certificate Hash Generator |
| Figure 5 | ផ្នែក ១១ | បង្ហាញ Hash ផ្លាស់ប្តូរពេល Data ផ្លាស់ប្តូរ |
| Figure 6 | ផ្នែក ១២ | បង្ហាញ Hashing Records from CSV |
| Figure 7 | ផ្នែក ១៣ | បង្ហាញ Tamper Detection Using Hash Comparison |
[1] Python Software Foundation, “hashlib — Secure hashes and message digests,” Python 3 Documentation, 2026.
[2] National Institute of Standards and Technology, “FIPS 180-4, Secure Hash Standard (SHS),” 2015.
[3] Python Software Foundation, “json — JSON encoder and decoder,” Python 3 Documentation, 2026.
[4] D. Yaga, P. Mell, N. Roby, and K. Scarfone, “Blockchain Technology Overview,” National Institute of Standards and Technology, NISTIR 8202, 2018.
មតិយោបល់ 0