uk
Feedback
ערוץ - python tip israel

ערוץ - python tip israel

Відкрити в Telegram

ערוץ מדריכים לפייתון וקוד פתוח

Показати більше
1 792
Підписники
Немає даних24 години
Немає даних7 днів
Немає даних30 днів
Архів дописів
האתר כלים עודכן ועכשיו הכל עובד יותר מהר https://python-tips.vercel.app/ גם עיצוב שופר

🐍 PyOTP ספריית 🕒 🔐 יצירה ואימות של HOTP (OTP HMAC) 🔐 OTP מבוסס HMAC (HOTP) הוא אלגוריתם סיסמאות חד פעמי שיוצר OTP על סמך זמן ומפתח סודי משותף. כך תוכל להשתמש ב- PyOTP כדי ליצור ולאמת HOTP:
import pyotp

# Generate a random HOTP secret
hotp_secret = pyotp.random_base32()

# Create a HOTP object with the secret and a counter
hotp = pyotp.HOTP(hotp_secret)

# Generate the first OTP code
hotp_code = hotp.at(0)

# Now you can print or store the secret and the code
print(f"HOTP secret: {hotp_secret}")
print(f"HOTP code: {hotp_code}")

# To verify a HOTP code, use the following code snippet:
# (Assuming you have the same HOTP secret and counter as before)
user_code = input("Enter the HOTP code: ")
if hotp.verify(user_code, 0):
    print("Code is valid")
else:
    print("Code is invalid")


עם PyOTP, ניתן להוסיף שכבת אבטחה נוספת לפרוייקט או לאתר פייתון על ידי הטמעת סיסמאות חד פעמיות 2FA.

הקוד בגיטהאב דוגמא לשימוש בpyotp עם flask https://github.com/nhman-python/flask-2fa

עוד מעט מדריך איך ליצור את כל הלוגיקה של 2fa
עוד מעט מדריך איך ליצור את כל הלוגיקה של 2fa

חישוב כמה ימים וכמה שניות עברו מאז תאריך מסוים עדיין בפיתוח יוסיף בהמשך עוד הרבה פיטצ'רים מעניינים https://age-calctor.vercel.app/

למי שרוצה סקריפט חמוד שהכנתי להספים פישינג צריך רק לדעת מה הפרמטרים שנשלחים פועל רק באתרים ללא הגנה מיוחדת או בדיקת בקשות csrf וכו... https://gist.github.com/nhman-python/238b4076ceeb077a9db6ac9f7afd25ef

דחיסה וחילוץ קבצים Pyminizip 📚🗜 ## דחיסת קובץ:
import pyminizip

source_file = "example.txt"
target_zip = "compressed.zip"
password = None # set password as string if you need
compression_level = 5 # 1-9

pyminizip.compress(source_file, None, target_zip, password, compression_level)

## דחיסת מספר קבצים:
import pyminizip

source_files = ['file.txt', 'file1.txt', 'file2.txt']

target_zip = "multiple_files.zip"
password = "secure_password"  # set password or leve blank
compression_level = 5  # You can adjust the compression level as needed 1-9.

pyminizip.compress_multiple(source_files, [], target_zip, password, compression_level)

## ייצוא קבצים
import pyminizip

# Define the source ZIP file path, password, target directory path, and without an option.
src_file_path = "multiple_files.zip"
password = ""
target_dir = "./extract_path"  # must!!!! create this directory before
without_path = 0  # Set to 1 to exclude a path during extraction, set to 0 to include a path.

# Perform the file extraction.
pyminizip.uncompress(src_file_path, password, target_dir, without_path)

הצהרות match וcase ⚠️ הקוד יעבוד רק בפייתון 3.10 ומעלה ⚠️ תכונה די חדשה ב- Python 3.10. מספקת דרך קלה ותמציתית יותר ליישם הצהרות if else וכו'. הצהרת match לוקחת ביטוי כטיעון ולאחר מכן משווה אותו לסדרה של מקרים (case). כל מקרה הוא הצהרה המציינת ערך כל שהוא ואת הקוד לביצוע אם הדפוס תואם. הנה דוגמה פשוטה להצהרת match:
response_code = 400

match response_code:
    case 200:
        print("all work!")
    case 300:
        print("error 300!")
    case 400:
        print("how something bad happens")
    case 500:
        print("Something went wrong.")

בדוגמה זו, אנו בודקים את הערך של המשתנה response_code. אם הערך הוא 200, נדפיס את ההודעה "all work!" אם הערך הוא 300, נדפיס את ההודעה "error 300", וכן הלאה. ניתן להשתמש בהצהרות match case כדי ליישם לוגיקה מורכבת יותר מהדוגמה הפשוטה שלמעלה. לדוגמה, נוכל להשתמש בהם כדי לבדוק את סוג האובייקט או כדי להתאים מחרוזת לביטוי רגולרי. הנה דוגמה להצהרת match שבודק את סוג האובייקט:
data = {"name": "John Doe", "age": 30}

match data:
    case dict():
        print("The data is a dictionary.")
    case list():
        print("The data is a list.")
    case str():
        print("The data is a string.")
    case int():
        print("The data is an integer.")
    case float():
        print("The data is a float.")
    case None:
        print("The data is None.")

בדוגמה זו, אנו בודקים את סוג משתנה הנתונים. אם המשתנה הוא מילון, נדפיס את ההודעה "The data is a dictionary.". אם המשתנה הוא רשימה, נדפיס את ההודעה "The data is a list.", וכן הלאה. ניתן להשתמש בהצהרות match case גם כדי להתאים מחרוזות לביטויים רגולריים. לדוגמה, הקוד הבא מתאים למחרוזת "hello world" מול הביטוי הרגולרי "hello (.*)": import re x = "hello world" match x: case value if re.match(r"hello (.*)", value): print("The string matches the regular expression.") case _: print("The string does not match the regular expression.") בדוגמה זו, אם המחרוזת "hello world" תואמת לביטוי הרגולרי, ההודעה "המחרוזת תואמת את הביטוי הרגולרי." מודפס. אחרת, ההודעה "המחרוזת לא תואמת לביטוי הרגולרי." מודפס. סיכום: הצהרת match וcase זוהי אפשרות אלגנטית וקלילה כדי ליישם הצהרות if-else בצורה נוחה יותר.

עד שאכין סרטון תוכלו לראות פה בשורה 44 את הפונקציה שבודקת את הנתיב ובשורות 171 172 הוספתי בדיקה אם הנתיב נמצא רק בתקיית העלאות רק אז יהיה ניתן למחוק את הקובץ דוגמא לניצול בקוד ללא הבדיקה: ../somefile.txt עובר לתקייה קודמת על ידי שימוש ב. . למי שלא מכיר זה כמו הפקודה cd. . יותר מאוחר יעלה עוד כמה שיפורים כמו אפשרות לעלות רק אם משתמש רשום וכו'

תוקן אקספלויט שנתן אפשרות למחוק כל קובץ בשרת דרך בקשת http רוצים לראות איך הניצול עובד? ואיך תיקנתי אותו? 👍/👎

הסבר args kwargs: 1. *args: הפרמטר *args מאפשר לפונקציה לקבל מספר של פרמטרים מיקומיים שונים. או "רשימת ארגומנטים באורך משתנה". האופרטור * משמש להעברת מספר משתנה של ארגומנטים לפונקציה. הנה דוגמה שתמצא את השימוש שלו: def print_number(*args):     for arg in args:         print(arg) print_number(1, 2, 3, 4)    פלט:    1 2 3 4       בדוגמה שנתתי, הפונקציה print_number מקבלת מספר כלשהו של ארגומנטים, אשר נדפיס בתוך הפונקציה. הפרמטר *args מאפשר לנו להעביר מספר ארגומנטים מראש, מבלי לציין אותם באופן יחיד. 2. **kwargs:    הפרמטר kwargs מאפשר לפונקציה לקבל מספר של ארגומנטים מזוהים שונים. האופרטור   משמש להעברת מספר משתנה של ארגומנטים מזוהים לפונקציה. הנה דוגמה שתמצא את השימוש שלו: def print_details(**kwargs):        for key, value in kwargs.items():            print(key, "=", value)    print_details(name="John", age=25, country="USA")       פלט:       name = John    age = 25    country = USA    בדוגמה שנתתי, הפונקציה print_details מקבלת מספר ארגומנטים שונים,  הפרמטר **kwargs מאפשר לנו להעביר מספר ארגומנטים מבלי להגדירם באופן מפורש בחתימת הפונקציה. סיכום *args ו- **kwargs מועילים כאשר נצטרך לקבל מספר ארגומנטים שאינו מוגד מראש. *args עובד עם ארגומנטים מיקומיים, בעוד **kwargs עובד עם ארגומנטים מזוהים. תכונות אלה מספקות גמישות ומאפשרות ליצור פונקציות שיכולות לעבוד עם מגוון רחב של קלטים.

שרת העלאת קבצים↖️ כולל ממשק ניהול לקבצים https://github.com/nhman-python/upload_http_python

מחיקת קבצים בצורה מאובטחת 🗑 כולל אפשרות לבחור כמה דריסות הקובץ יעשה לפני שימחק את הקובץ קוד מקור: https://github.com/nhman-python/secure-delete

אתגר ls, dir רמה :קלה צרו סקריפט שמציג את הקבצים שקיימים בתקיה הנוכחית בעזרת מודול os כולל הגודל שלהם בmd (מ''ב) תשובות לפה @Python_tipbot

📁 קבלת רשימה של כל הקבצים שנמצאים בתקיה כולל תתי תקיות 🗂 הפונקציה os.walk היא פונקציה שנועדה לעבור על כל התקיות והקבצים בתיקייה מסוימת ובתתי-תתי-תיקיות שלה. היא סורקת את שמות הקבצים, מתחילה מהתיקייה הנוכחית ואז ממשיכה לסריקת תתי-תיקיות עד לסיום סריקת כל התקיות והקבצם. הנה התחביר הבסיסי של os.walk:
import os

for root, directories, files in os.walk(folder_path):

בוא נפרק את כל אחד מרכיבי פונקציית os.walk: - folder_path : זו התיקייה ההתחלתית ממנה נתחיל את הסריקה. ניתן לספק נתיב יחסי או מוחלט לתיקייה. - root: מייצג את התיקייה הנוכחית שבה os.walk עובר כעת. זהו מחרוזת שמכילה את הנתיב לתיקייה הנוכחית. - directories: זוהי רשימה של כל התיקיות המשניות בתוך התיקייה הנוכחית. - files: זוהי רשימה של כל הקבצים בתוך התקיות ותתי התקיות דוגמא להדפסת כל נתיבי הקבצים בתקייה כולל קבצים בתתי-תקיות: for root,
directories
, files in os.walk('/folder'): for file in files: print(os.path.join(root, file))

הצפנת 🔐 תקיות שלמות הסקריפט מחפש את כל הקבצים בכל התקיות ומצפין אותם זהירות ‼️ לא להשים נתיב מערכת כמו c וכו... זה פשוט ילך ויחפש את כל הקבצים שאפשר לכתוב עליהם ויצפין אותם לתיעוד המלא של הספרייה: https://pypi.org/project/simple2encrypt/

מדריך ל-setuptools ב-פיתון ויצירת מודולי ספריות 📦 מבוא: ספריית setuptool היא כלי עוצמתי המספק דרך פשוטה ליצירה והפצה של ספריות או חבילות ב-פייתון. הכלי מספק אופן מתקנת להגדרת מטא-נתונים, ניהול תלות ובניית חבילות הפצה. במאמר זה נחקור את היסודות של Setuptools ונדבר על אופן יצירת מודולי ספריות בעזרת הכלי הזה. 1. התקנת Setuptools: לפני שנתחיל ליצור את הספריה, יש לוודא שה-Setuptools מותקן במערכת שלך. ניתן להתקין אותו בעזרת הפקודה הבאה ב-pip, מנהל החבילות של Python: pip install setuptools 2. מבנה הפרויקט: כדי ליצור מודול של ספריה, חשוב לשמור על מבנה פרויקט מסוים. נחליף תחילה תיקיית הפרויקט של הספריה. בתוך התיקייה הזו ניצור עוד תיקייה נוספת עם אותו השם כמו הספריה שלנו. התיקייה הפנימית תכיל את קבצי הקוד של המודולים של הספריה. בנוסף, עלינו ליצור קובץ setup.py בראש התיקייה של הפרויקט. לדוגמה, כך ייראה מבנה הפרויקט:
my_library/
├── my_library/
│   ├── __init__.py
│   └── module.py
└── setup.py


3. יצירת המודול של הספריה: בתוך התיקייה my_library, ניתן ליצור קבצי מודול של Python המגדירים את הפונקציות של הספריה שלך. קבצי המודול יהיו עם סיומת .py ויכולים לכלול מחלקות, פונקציות ומשתנים. עלינו גם לכלול קובץ init__.py__ בתוך תיקיית my_library כדי להפוך אותה לחבילה. לדוגמה, ניצור מודול פשוט בשם module.py עם התוכן הבא: def greet(name): print(f"hello, {name}!") 4. הגדרת מטא-נתונים: כדי לספק מידע על הספריה שלך, כגון השם, גרסה, מחבר ותלות, עלינו ליצור קובץ setup.py. פתחו את קובץ ה-setup.py והגדירו את מטא-נתונים בעזרת פונקציית setup() של Setuptools. לדוגמה, כך ייראה קובץ ה-setup.py: from setuptools import setup, find_packages setup( name="my-library", version="0.1.0", author="Your Name", author_email="your@email.com", description="A simple library for greeting", packages=find_packages(), ) 5. בניית והתקנה של הספריה: עם מבנה הפרויקט והמטא-נתונים במקום, ניתן לבנות את חבילת הספריה באמצעות Setuptools. פתח את הטרמינל, נווט לתיקיית הפרויקט והרץ את הפקודה הבאה: python3 setup.py sdist bdist_wheel הפקודה תיצור שני חבילות הפצה: חבילת מקור (sdist) וחבילת (bdist_wheel). כדי להתקין את הספריה באופן מקומי לצורך בדיקות, הריץ את הפקודה הבאה:
python3 setup.py install

אפשר גם להפיץ את הספריה על ידי העלאת חבילת ההפצה שנוצרה ל- PyPI או גורם פקודה אחר. 6. השימוש בספריה: לאחר התקנת הספריה, ניתן לייבא ולהשתמש בה בקובצי Python אחרים או בפרויקטים נוספים. לדוגמה, אם יש לך מודול בשם module.py עם פונקציה greet(), ניתן לייבא ולקרוא לפונקציה כך: from my_library.module import greet greet("hello") מסקנה: ספריית setuptools מקלה על תהליך יצירה והפצה של ספריות או חבילות ב-פייתון. על ידי עקיפת שלבים כמו בניית חבילות והגדרת מטא-נתונים, מפשט את התהליך ומאפשר למפתחים להתרכז ביצירת ספריות חזקות וקלות לשימוש.

הצפנת תקיות וטקסט להתקנת הספריה https://t.me/python_tip_israel/209

יותר מאוחר הסבר איך להצפין 🔐 את כל הנתונים שלכם או תקיות מסוימות ורק אם קובץ המפתח תוכלו לשחזר את המידע אבל אני מוסיף אזהרה ❗️❗️ לא להשתמש בזה נגד אנשים או לוירוסים וכו אני לא לוקח שום אחריות השימוש רק למטרות אישיות לקבוצת הדיונים https://t.me/python_tip_chat לשאלות בפרטי @Python_tipbot

דוגמא לשימוש בספריה להצפנה, עשיתי את זה הכי פשוט שאפשר 🔐
from simple2encrypt import Encryption, generate_key

key = generate_key('hello_world', 32)

message = b'hello'

encrypt = Encryption(key, data=message)
print(encrypt.encrypt())