پرش به مطلب اصلی

پنهان‌سازی مضاعف مقادیر حساس

از آنجا که حساسیت حفظ اطلاعات شخصی کاربران دیوار بالاترین اولویت ماست، لازم است پیش از قرار دادن کلیدهای سمنتیک زیر در افزونه، این مقادیر یک مرحله در سرور شما با الگوریتم SHA256 هش شوند.

دیوار از این مقادیر هش شده برای یکتاسازی احرازها استفاده میکند. به همین دلیل لازم است یک ورودی ثابت در سرویس پروایدرهای مختلف، منجر به هش‌های یکسانی شوند.

تست کیس:

VINsha256 hash hex
IRJC95R23KJ039206e0c01d18d946a4145892bba6a6f31d1c0bc16de04f3df3d3ccd3adfe63e838bf
IRJC95r23kj039206e0c01d18d946a4145892bba6a6f31d1c0bc16de04f3df3d3ccd3adfe63e838bf
IRJC95r۲۳kj039206e0c01d18d946a4145892bba6a6f31d1c0bc16de04f3df3d3ccd3adfe63e838bf

سمنتیک‌های تاثیرپذیر

  • VIN
  • chassis_number
  • engine_number
  • real_estate_id
  • old_real_estate_id

قواعد تمیزکاری

  • همه اعداد به ascii تبدیل شوند و کاراکتر‌های فارسی یا عربی در رشته نباشد.
  • حروف انگلیسی کپیتال شوند.
  • در ابتدا یا انتهای رشته حرف خالی یا اسپیس نباشد.
  • مقدار هش SHA256 شده عینا برابر مقدار مندرج روی کارت ماشین یا سند باشد و پیشوند یا پسوند از آن کاسته نشود.

تولید و مقایسه مقادیر

برای تولید مقادیر تست کیس بیشتر و صحت‌سنجی پیاده‌سازی خود، میتوانید از اسکریپت زیر استفاده کنید.

import hashlib

def persian_numbers_to_ascii(text):
persian_to_ascii = {
'۰': '0', '۱': '1', '۲': '2', '۳': '3', '۴': '4',
'۵': '5', '۶': '6', '۷': '7', '۸': '8', '۹': '9'
}
return ''.join(persian_to_ascii.get(ch, ch) for ch in text)

def sha256_vin(vin):
vin_clean = persian_numbers_to_ascii(vin.strip().upper())
hash_object = hashlib.sha256(vin_clean.encode('utf-8'))
return hash_object.hexdigest()

vin_input = input("Enter car VIN (can contain Persian numbers and letters): ")
vin_hash = sha256_vin(vin_input)
print(f"SHA-256 hash of processed VIN: {vin_hash}")

به منظور درج مقدار old_real_estate_id برای سند‌های قدیم پس از نرمالایز کردن مقادیر از اسکریپت زیر استفاده کنید.

def hash_old_real_estate_id(document_number, page_number):
"""
document_number // شماره دفتر
page_number // شماره صفحه
"""
old_real_estate_id = f'{document_number}|{page_number}'
old_real_estate_id_clean = persian_numbers_to_ascii(old_real_estate_id.strip().upper())
hash_object = hashlib.sha256(old_real_estate_id_clean.encode('utf-8'))
return hash_object.hexdigest()