Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ic:labs:01 [2023/09/30 23:29]
razvan.smadu
ic:labs:01 [2025/02/23 13:24] (current)
razvan.smadu [Laboratorul 01 - Introducere]
Line 1: Line 1:
 ===== Laboratorul 01 - Introducere ===== ===== Laboratorul 01 - Introducere =====
  
-Puteți lucra acest laborator folosind și platforma Google Colab, accesând [[https://​colab.research.google.com/​drive/1G8ycsy34UwwQqJHp2DgL5MtGERWzkhN_|acest]] link, cu excepția exercițiului bonus. Un scurt tutorial pentru utilizarea platformei poate fi găsit [[https://​docs.google.com/​document/​d/​1Dcnyv9wTfWJx8CEgnR6OgLbHAO7XD1BXGjwOAMAEmlc/​edit|aici]]. ​+Puteți lucra acest laborator folosind și platforma Google Colab, accesând [[https://​colab.research.google.com/​github/ACS-IC-labs/​IC-labs/​blob/​main/​labs/​lab01/​lab1.ipynb|acest]] link, cu excepția exercițiului bonus. Un scurt tutorial pentru utilizarea platformei poate fi găsit [[https://​docs.google.com/​document/​d/​1Dcnyv9wTfWJx8CEgnR6OgLbHAO7XD1BXGjwOAMAEmlc/​edit|aici]]. ​
  
 ==== Python3 Crash Course ==== ==== Python3 Crash Course ====
  
-Tutorialul poate fi găsit [[ic:​resurse:​python|aici]].+Tutorialul poate fi găsit [[ic:​resurse:​python|aici]]. La laboratoare vom folosi Python 3.10 sau mai nou.
  
 ==== Codificare vs Criptare ==== ==== Codificare vs Criptare ====
Line 31: Line 31:
 Mai jos găsiți câteva funcții utile pentru conversii și operații de XOR pentru date de diferite formate: Mai jos găsiți câteva funcții utile pentru conversii și operații de XOR pentru date de diferite formate:
  
 +<spoiler Click pentru a vedea utils.py>​
 <file python utils.py>​ <file python utils.py>​
 import base64 import base64
 +from typing import Generator
  
  
-def _pad(x: str, size: int) -> str: +def _pad(data: str, size: int) -> str: 
-    reminder = len(x) % size+    reminder = len(data) % size
     if reminder != 0:     if reminder != 0:
-        ​= "​0"​ * (size - reminder) + x +        ​data = "​0"​ * (size - reminder) + data 
-    return ​x+    return ​data
  
  
-def _chunks(string: str, chunk_size: int) -> str: +def _chunks(data: str, chunk_size: int) -> Generator[str, None, None]
-    ​string ​= _pad(string, chunk_size) +    ​data = _pad(data, chunk_size) 
-    for i in range(0, len(string), chunk_size):​ +    for i in range(0, len(data), chunk_size):​ 
-        yield string[i : i + chunk_size]+        yield data[i : i + chunk_size]
  
  
-def _hex(xstr) -> str: +def _hex(dataint) -> str: 
-    return format(x, "​02x"​)+    return format(data, "​02x"​)
  
  
Line 178: Line 180:
  
  
-def strxor(a: str, b: str) -> str:+def strxor(operand_1: str, operand_2: str) -> str:
     """​Performs a bitwise exclusive OR (XOR) operation on two strings.     """​Performs a bitwise exclusive OR (XOR) operation on two strings.
  
     Args:     Args:
-        ​(str): The first string to be XORed. +        ​operand_1 ​(str): The first string to be XORed. 
-        ​(str): The second string to be XORed.+        ​operand_2 ​(str): The second string to be XORed.
  
     Returns:     Returns:
Line 196: Line 198:
         '​\\x18\\x00\\x1a'​         '​\\x18\\x00\\x1a'​
     """​     """​
-    return ""​.join(chr(ord(x) ^ ord(y)) for (x, y) in zip(ab))+    return ""​.join(chr(ord(x) ^ ord(y)) for (x, y) in zip(operand_1operand_2))
  
  
-def bitxor(a: str, b: str) -> str:+def bitxor(operand_1: str, operand_2: str) -> str:
     """​Performs a bitwise exclusive OR (XOR) operation on two bit-strings.     """​Performs a bitwise exclusive OR (XOR) operation on two bit-strings.
  
     Args:     Args:
-        ​(str): The first bit-string to be XORed. It should only contain valid +        ​operand_1 ​(str): The first bit-string to be XORed. It should only 
-            binary digits (0 or 1). +            ​contain valid binary digits (0 or 1). 
-        ​(str): The second bit-string to be XORed. It should only contain valid +        ​operand_2 ​(str): The second bit-string to be XORed. It should only 
-            binary digits (0 or 1).+            ​contain valid binary digits (0 or 1).
  
     Returns:     Returns:
Line 219: Line 221:
         '​10011001'​         '​10011001'​
     """​     """​
-    return ""​.join(str(int(x) ^ int(y)) for (x, y) in zip(ab))+    return ""​.join(str(int(x) ^ int(y)) for (x, y) in zip(operand_1operand_2))
  
  
-def hexxor(a: str, b: str) -> str:+def hexxor(operand_1: str, operand_2: str) -> str:
     """​Performs a bitwise exclusive OR (XOR) operation on two hexadecimal     """​Performs a bitwise exclusive OR (XOR) operation on two hexadecimal
     strings.     strings.
  
     Args:     Args:
-        ​(str): The first hexadecimal string to be XORed. It should ​have an +        ​operand_1 ​(str): The first hexadecimal string to be XORed. It should 
-            even number of characters and only contain valid hexadecimal ​digits +            ​have an even number of characters and only contain valid hexadecimal 
-            (0-9, A-F, a-f). +            ​digits ​(0-9, A-F, a-f). 
-        ​(str): The second hexadecimal string to be XORed. It should ​have an +        ​operand_2 ​(str): The second hexadecimal string to be XORed. It should 
-            even number of characters and only contain valid hexadecimal digits +            ​have an even number of characters and only contain valid 
-            (0-9, A-F, a-f).+            ​digits ​(0-9, A-F, a-f).
  
     Returns:     Returns:
Line 248: Line 250:
     return ""​.join(     return ""​.join(
         _hex(int(x, 16) ^ int(y, 16))         _hex(int(x, 16) ^ int(y, 16))
-        for (x, y) in zip(_chunks(a, 2), _chunks(b, 2))+        for (x, y) in zip(_chunks(operand_1, 2), _chunks(operand_2, 2))
     )     )
  
Line 260: Line 262:
     Args:     Args:
         bytes_data (bytearray | bytes): The byte array or the byte string to be         bytes_data (bytearray | bytes): The byte array or the byte string to be
-            converted. It should be encoded in UTF-format.+            converted. It should be encoded in Latin-format.
  
     Returns:     Returns:
         str: The string representation of the byte array or the byte string,         str: The string representation of the byte array or the byte string,
-            decoded using UTF-encoding.+            decoded using Latin-encoding.
  
     Examples:     Examples:
Line 272: Line 274:
         '​IC'​         '​IC'​
     """​     """​
-    return bytes_data.decode(encoding="​utf-8")+    return bytes_data.decode(encoding="​raw_unicode_escape")
  
  
Line 283: Line 285:
     Returns:     Returns:
         bytes: The byte string representation of the string, encoded using         bytes: The byte string representation of the string, encoded using
-        ​UTF-encoding.+        ​Latin-encoding.
  
     Examples:     Examples:
Line 291: Line 293:
         b'​IC'​         b'​IC'​
     """​     """​
-    return string_data.encode(encoding="​utf-8")+    return string_data.encode(encoding="​raw_unicode_escape")
  
  
Line 304: Line 306:
  
     Returns:     Returns:
-        str: The base64 encoded string, using UTF-encoding.+        str: The base64 encoded string, using Latin-encoding.
  
     Examples:     Examples:
Line 323: Line 325:
  
     Returns:     Returns:
-        str: The decoded string, using UTF-encoding.+        str: The decoded string, using Latin-encoding.
  
     Examples:     Examples:
Line 333: Line 335:
     return bytes_to_string(base64.b64decode(string_to_bytes(data)))     return bytes_to_string(base64.b64decode(string_to_bytes(data)))
 </​file>​ </​file>​
 +</​spoiler>​
  
 == Bytes în Python == == Bytes în Python ==
Line 372: Line 375:
  
 <code python> <code python>
-alphabet ​= "​ABCDEFGHIJKLMNOPQRSTUVWXYZ"​+ALPHABET ​= "​ABCDEFGHIJKLMNOPQRSTUVWXYZ"​
  
  
Line 378: Line 381:
     if not "​A"​ <= letter <= "​Z":​     if not "​A"​ <= letter <= "​Z":​
         raise ValueError("​Invalid letter"​)         raise ValueError("​Invalid letter"​)
-    return ​alphabet[(ord(letter) - ord("​A"​) + 3) % len(alphabet)]+    return ​ALPHABET[(ord(letter) - ord("​A"​) + 3) % len(ALPHABET)]
 </​code>​ </​code>​
  
Line 397: Line 400:
 Testați următoarele comenzi în consolă: Testați următoarele comenzi în consolă:
 <code python> <code python>
->>>​ print(alphabet+>>>​ print(ALPHABET
->>>​ len(alphabet+>>>​ len(ALPHABET
->>> ​alphabet[0]+>>> ​ALPHABET[0]
 >>>​ ord("​A"​) >>>​ ord("​A"​)
 >>>​ ord("​D"​) - ord("​A"​) >>>​ ord("​D"​) - ord("​A"​)
Line 445: Line 448:
  
 <file Python test_caesar.py>​ <file Python test_caesar.py>​
-alphabet ​= "​ABCDEFGHIJKLMNOPQRSTUVWXYZ"​+ALPHABET ​= "​ABCDEFGHIJKLMNOPQRSTUVWXYZ"​
  
  
Line 451: Line 454:
     if not '​A'​ <= letter <= '​Z':​     if not '​A'​ <= letter <= '​Z':​
         raise ValueError('​Invalid letter'​)         raise ValueError('​Invalid letter'​)
-    return ​alphabet[(ord(letter) - ord('​A'​) + 3) % len(alphabet)]+    return ​ALPHABET[(ord(letter) - ord('​A'​) + 3) % len(ALPHABET)]
  
  
Line 493: Line 496:
     if not "​A"​ <= letter <= "​Z":​     if not "​A"​ <= letter <= "​Z":​
         raise ValueError("​Invalid letter"​)         raise ValueError("​Invalid letter"​)
-    return ​alphabet[(ord(letter) - ord("​A"​) + k) % len(alphabet)]+    return ​ALPHABET[(ord(letter) - ord("​A"​) + k) % len(ALPHABET)]
  
  
Line 571: Line 574:
 <note info> <note info>
 `<​ciphertexts filename>​` trebuie să conțină cele 10 texte cifrate de mai sus. `<​ciphertexts filename>​` trebuie să conțină cele 10 texte cifrate de mai sus.
-</node>+</note>
  
 <note info> <note info>
ic/labs/01.1696105785.txt.gz · Last modified: 2023/09/30 23:29 by razvan.smadu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0