coisas
This commit is contained in:
		| @@ -1,3 +1,9 @@ | ||||
| import sys | ||||
|  | ||||
| if len(sys.argv) < 2: | ||||
|     print("Usage: python3 afreq.py [arquivo]") | ||||
|     sys.exit(1) | ||||
|  | ||||
| frequencias = { | ||||
|     'A': 14.63, | ||||
|     'B': 1.04, | ||||
| @@ -27,6 +33,10 @@ frequencias = { | ||||
|     'Z': 0.47 | ||||
| } | ||||
|  | ||||
| frequencias = sorted(frequencias.keys(), key=lambda x: frequencias[x]) | ||||
| frequencias.reverse() | ||||
| caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' | ||||
|  | ||||
| def afreq(string): | ||||
|     # determinar a frequencia de cada caractere na string | ||||
|     # comparar com a frequencia de cada caractere na lingua portuguesa | ||||
| @@ -42,19 +52,29 @@ def afreq(string): | ||||
|         else: | ||||
|             str_freq[c] = 1 | ||||
|  | ||||
|     for c in str_freq: | ||||
|         if not c.isalnum(): | ||||
|             continue | ||||
|     freq_sorted = sorted(str_freq.items(), key=lambda item: item[1]) | ||||
|     freq_sorted = [x[0] for x in freq_sorted] | ||||
|     freq_sorted.reverse() | ||||
|  | ||||
|         str_freq[c] /= len(string) | ||||
|  | ||||
|     freq_sorted = dict(sorted(str_freq.items(), key=lambda item: item[1])) | ||||
|     print(freq_sorted[0], frequencias[0]) | ||||
|     print(freq_sorted[1], frequencias[1]) | ||||
|  | ||||
|     possiveis_chaves = [] | ||||
|     for c in frequencias: | ||||
|         for k in freq_sorted: | ||||
|             if abs(frequencias[c] - freq_sorted[k]) < 0.5: | ||||
|                 possiveis_chaves.append(ord(k) - ord(c)) | ||||
|  | ||||
|     for i, c in enumerate(frequencias): | ||||
|         if c not in freq_sorted: | ||||
|             continue | ||||
|  | ||||
|         index_c = caracteres.index(c) | ||||
|         index_freq = caracteres.index(freq_sorted[i]) | ||||
|  | ||||
|         print(c, index_c, index_freq) | ||||
|  | ||||
|         possiveis_chaves.append((index_freq - index_c) % 26) # (indice da freq da letra na str - indice da letra em PT) % ignorar letras maiusculas | ||||
|  | ||||
|     return possiveis_chaves | ||||
|  | ||||
| file_str = open(sys.argv[1], 'r').read() | ||||
| possiveis_chaves = afreq(file_str) | ||||
|  | ||||
| print(possiveis_chaves) | ||||
| @@ -39,6 +39,8 @@ special_chars = { | ||||
|     ")": ")" | ||||
| } | ||||
|  | ||||
| caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' | ||||
|  | ||||
| def cesar(string, key): | ||||
|     new_string = "" | ||||
|  | ||||
| @@ -50,26 +52,28 @@ def cesar(string, key): | ||||
|         if letter in special_letters: | ||||
|             letter = special_letters[letter] | ||||
|  | ||||
|         new_letter = ord(letter) + key | ||||
|         index = caracteres.index(letter) | ||||
|         new_index = (index + key) % len(caracteres) | ||||
|         new_letter = caracteres[new_index] | ||||
|  | ||||
|         # [A-Z, a-z, 0-9] | ||||
|         if ord('0') <= ord(letter) <= ord('9'): | ||||
|             if new_letter > ord('9'): | ||||
|                 new_letter += 7 # 9 + 1 = A | ||||
|             elif new_letter < ord('0'): | ||||
|                 new_letter += 75 # 0 - 1 = z | ||||
|         elif letter.isupper(): | ||||
|             if new_letter > ord('Z'): | ||||
|                 new_letter += 6 # Z + 1 = a | ||||
|             elif new_letter < ord('A'): | ||||
|                 new_letter -= 7 # A - 1 = 9 | ||||
|         else: | ||||
|             if new_letter > ord('z'): | ||||
|                 new_letter -= 75 # z + 1 = 0 | ||||
|             elif new_letter < ord('a'): | ||||
|                 new_letter -= 6 # a - 1 = Z | ||||
|         # # [A-Z, a-z, 0-9] | ||||
|         # if ord('0') <= ord(letter) <= ord('9'): | ||||
|         #     if new_letter > ord('9'): | ||||
|         #         new_letter += 7 # 9 + 1 = A | ||||
|         #     elif new_letter < ord('0'): | ||||
|         #         new_letter += 75 # 0 - 1 = z | ||||
|         # elif letter.isupper(): | ||||
|         #     if new_letter > ord('Z'): | ||||
|         #         new_letter += 6 # Z + 1 = a | ||||
|         #     elif new_letter < ord('A'): | ||||
|         #         new_letter -= 7 # A - 1 = 9 | ||||
|         # else: | ||||
|         #     if new_letter > ord('z'): | ||||
|         #         new_letter -= 75 # z + 1 = 0 | ||||
|         #     elif new_letter < ord('a'): | ||||
|         #         new_letter -= 6 # a - 1 = Z | ||||
|  | ||||
|         new_string += chr(new_letter) | ||||
|         new_string += new_letter | ||||
|  | ||||
|     return new_string | ||||
|  | ||||
|   | ||||
							
								
								
									
										1
									
								
								trabalho1/input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								trabalho1/input.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| Pouco conhecimento faz com que as pessoas se sintam orgulhosas. Muito conhecimento, que se sintam humildes. Eh assim que as espigas sem graos erguem desdenhosamente a cabeca para o ceu, enquanto as cheias as baixam para a terra, sua mae. Leonardo Da Vinci. | ||||
							
								
								
									
										6
									
								
								trabalho1/texto.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								trabalho1/texto.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| g5Bt5 t54yvtz3v4A5 wrG t53 7Bv r9 6v995r9 9v 9z4Ar3 | ||||
| 58xB2y59r9. dBzA5 t54yvtz3v4A5, 7Bv 9v 9z4Ar3 | ||||
| yB3z2uv9. Vy r99z3 7Bv r9 v96zxr9 9v3 x8r59 v8xBv3 | ||||
| uv9uv4y59r3v4Av r trsvtr 6r8r 5 tvB, v47Br4A5 r9 | ||||
| tyvzr9 r9 srzEr3 6r8r r Av88r, 9Br 3rv. | ||||
| cv54r8u5 Ur mz4tz. | ||||
							
								
								
									
										22
									
								
								trabalho1/vernam.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								trabalho1/vernam.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| import sys | ||||
|  | ||||
| if len(sys.argv) != 3: | ||||
|     print("Usage: python3 vernam.py [key] [string]") | ||||
|     sys.exit(1) | ||||
|  | ||||
| key = sys.argv[1] | ||||
| string = sys.argv[2] | ||||
|  | ||||
| if len(string) != len(key): | ||||
|     print("Key and string must have the same length") | ||||
|     sys.exit(1) | ||||
|  | ||||
| encrypted = "" | ||||
|  | ||||
| for i in range(len(string)): | ||||
|     encrypted += chr(ord(string[i]) ^ ord(key[i])) | ||||
|     # print(ord(string[i]) ^ ord(key[i])) | ||||
|  | ||||
| print(encrypted) | ||||
|  | ||||
| # python3 vernam.py ABCDEF TOMATE | xargs python3 vernam.py ABCDEF | ||||
		Reference in New Issue
	
	Block a user