Mask / Hash PII
mask_pii · validity · any
2026-09-23
กำลังประมวลผล…
mask_pii · validity · any
2026-09-23
การส่งไฟล์ให้ทีมอื่นหรือผู้ให้บริการภายนอกมักไม่จำเป็นต้องเปิดเผยชื่อ เบอร์โทร หรือเลขบัตร แต่ก็ยังต้องเชื่อมข้อมูลระหว่างตารางให้ได้ เทคนิคนี้ให้สามวิธี ตั้งแต่ปิดบางส่วนเพื่อให้ยังอ่านออกบ้าง ไปจนถึงแปลงเป็นค่าแฮชที่เชื่อมข้อมูลได้แต่ย้อนกลับไม่ได้
remove_column ปลอดภัยกว่าmask เก็บตัวอักษรท้ายไว้ตาม keepLast แล้วแทนที่ส่วนที่เหลือด้วย * โดยนับเป็นอักขระ ไม่ใช่ไบต์ ข้อความไทยจึงไม่เพี้ยนredact แทนค่าทั้งช่องด้วย [REDACTED] เหมาะเมื่อไม่ต้องใช้ค่านั้นอีกเลยhash_sha256 แปลงเป็นค่าแฮช ค่าเดียวกันให้ผลเดียวกันเสมอ จึงยัง join ข้ามตารางได้ และตัดความยาวได้ด้วย hashLengthsalt ระบบจะเตือน เพราะค่าที่เดาได้จะถูกไล่สุ่มย้อนกลับได้ ให้ใช้ salt ที่เก็บเป็นความลับและใช้ค่าเดิมทุกครั้งที่ต้องการให้ join ติด| Parameter | Type | Default |
|---|---|---|
columns | string[] | — |
method | mask | hash_sha256 | redact | "mask" |
keepLast | number | 4 |
salt | string | "" |
hashLength | number | 64 |
import hashlib
import json
def mask_pii(value, method='mask', keep_last=4, salt='', hash_length=64):
if value is None:
return None
text = str(value)
if method == 'redact':
return '[REDACTED]'
if method == 'hash_sha256':
# ค่าเดียวกันได้แฮชเดียวกันเสมอ จึงยัง join ข้ามตารางได้ และ salt ทำให้ไล่สุ่มย้อนกลับไม่ได้
return hashlib.sha256((salt + text).encode('utf-8')).hexdigest()[:hash_length]
characters = list(text)
keep = min(keep_last, len(characters))
return '*' * (len(characters) - keep) + ''.join(characters[len(characters) - keep:])
values = ['สมชาย ใจดี', 'Poom', None]
result = {
'mask': [mask_pii(v) for v in values],
'redact': [mask_pii(v, 'redact') for v in values],
}
print(json.dumps(result, ensure_ascii=False))
ก่อนส่งไฟล์ลูกค้าให้เอเจนซี ให้ใช้ mask_pii กับคอลัมน์ phone แบบ mask เก็บสี่ตัวท้ายไว้เพื่อให้ทีมบริการยืนยันตัวตนทางโทรศัพท์ได้ และใช้ hash_sha256 พร้อม salt กับคอลัมน์ email เพื่อให้ยัง join กับรายงานผลแคมเปญได้ บันทึก salt ไว้ในที่ปลอดภัยเพราะต้องใช้ค่าเดิมในรอบถัดไป
ใช้ remove_column เมื่อไม่ต้องใช้คอลัมน์นั้นเลย ใช้ validate_email และ validate_thai_id ก่อนเพื่อให้ค่าที่จะแฮชอยู่ในรูปแบบเดียวกัน ไม่อย่างนั้นค่าเดียวกันจะได้แฮชคนละค่า