ysn-rfd/text-dataset-tiny-code-script-py-format
USED of tahamajs/medicine_ds_persian for .parquet file USED of Alijafarixcs2/persian-it-llama2-2k for .parquet file USED of Abirate/english_quotes for .jsonl file NEW FILES (05/12/2025) NEW FILES (12/26/2025) NEW FILES (02/15/2026)
31.6k
1from PIL import Image
2import qrcode
3import base64
4import hashlib
5from pyzbar.pyzbar import decode
6from cryptography.hazmat.primitives.asymmetric import padding
7from cryptography.hazmat.primitives import hashes, serialization
8from cryptography.exceptions import InvalidSignature
9
10# فایل تصویر گواهی
11CERT_IMAGE_PATH = "openai_certificate_yasin_realistic.png"
12
13# کلید عمومی PEM
14PUBLIC_KEY_PATH = "public_key.pem"
15
16# دادههای گواهی (باید دقیقا مثل دادههای اولیه باشه)
17cert_info = {
18 "Name": "Yasin",
19 "Last Name": "Aryanfard",
20 "User ID": "YSNRFD",
21 "Membership Date": "April 1, 2023",
22 "Issued Date": "June 28, 2025",
23 "Certificate ID": "OPENAI-YSN-APR2023-CERT1001",
24 "Signed By": "ChatGPT-4o",
25 "Model ID": "GPT4O-REP-TRUST-2025",
26 "Issuer": "OpenAI, Inc."
27}
28
29def extract_qr_signature(image_path):
30 img = Image.open(image_path)
31 decoded_objs = decode(img)
32 for obj in decoded_objs:
33 data = obj.data.decode('utf-8')
34 if data.startswith("-----"): # اگر کلید عمومی یا امضای بزرگ باشه
35 continue
36 return data # اولین داده QR کد که امضا هست
37 return None
38
39def extract_stego_message(img):
40 pixels = img.load()
41 width, height = img.size
42 bits = []
43 for y in range(height):
44 for x in range(width):
45 r, g, b, *rest = pixels[x, y]
46 bits.append(str(r & 1))
47 # تبدیل بیتها به کاراکترها
48 chars = []
49 for i in range(0, len(bits), 8):
50 byte = bits[i:i+8]
51 if len(byte) < 8:
52 break
53 byte_str = ''.join(byte)
54 char = chr(int(byte_str, 2))
55 if char == '\x00': # پایان پیام فرضی
56 break
57 chars.append(char)
58 return ''.join(chars)
59
60def verify_signature(public_key, signature, data):
61 try:
62 public_key.verify(
63 signature,
64 data,
65 padding.PSS(
66 mgf=padding.MGF1(hashes.SHA256()),
67 salt_length=padding.PSS.MAX_LENGTH
68 ),
69 hashes.SHA256()
70 )
71 return True
72 except InvalidSignature:
73 return False
74
75def main():
76 # بارگذاری تصویر
77 img = Image.open(CERT_IMAGE_PATH).convert("RGBA")
78
79 # استخراج امضا از QR
80 digital_signature_base64 = extract_qr_signature(CERT_IMAGE_PATH)
81 if not digital_signature_base64:
82 print("❌ امضا دیجیتال در QR کد یافت نشد!")
83 return
84
85 print("📥 امضا دیجیتال استخراج شده از QR کد.")
86
87 # استخراج پیام استگانوگرافی (CertificateID و VerificationCode)
88 stego_msg = extract_stego_message(img)
89 print(f"📥 پیام مخفی استگانوگرافی: {stego_msg}")
90
91 # بازسازی رشته داده برای امضا (باید دقیقاً مثل زمان ساخت گواهی)
92 data_string = "\n".join(f"{k}: {v}" for k, v in cert_info.items()).encode('utf-8')
93
94 # بارگذاری کلید عمومی
95 with open(PUBLIC_KEY_PATH, "rb") as f:
96 public_key = serialization.load_pem_public_key(f.read())
97
98 # تبدیل امضا به بایت
99 signature_bytes = base64.b64decode(digital_signature_base64)
100
101 # بررسی امضا
102 if verify_signature(public_key, signature_bytes, data_string):
103 print("✅ امضا دیجیتال معتبر است.")
104 else:
105 print("❌ امضا دیجیتال نامعتبر است یا دادهها تغییر کردهاند!")
106
107 # بررسی کد تأیید در پیام استگانوگرافی
108 expected_verification_code = f"VER-{hashlib.sha256(data_string).hexdigest()[:8].upper()}-{cert_info['Certificate ID'][-4:]}"
109 if expected_verification_code in stego_msg:
110 print("✅ کد تأیید در پیام مخفی استگانوگرافی معتبر است.")
111 else:
112 print("❌ کد تأیید در پیام مخفی یافت نشد یا اشتباه است!")
113
114if __name__ == "__main__":
115 main()
116 