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 = { | frequencias = { | ||||||
|     'A': 14.63, |     'A': 14.63, | ||||||
|     'B': 1.04, |     'B': 1.04, | ||||||
| @@ -27,6 +33,10 @@ frequencias = { | |||||||
|     'Z': 0.47 |     'Z': 0.47 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | frequencias = sorted(frequencias.keys(), key=lambda x: frequencias[x]) | ||||||
|  | frequencias.reverse() | ||||||
|  | caracteres = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' | ||||||
|  |  | ||||||
| def afreq(string): | def afreq(string): | ||||||
|     # determinar a frequencia de cada caractere na string |     # determinar a frequencia de cada caractere na string | ||||||
|     # comparar com a frequencia de cada caractere na lingua portuguesa |     # comparar com a frequencia de cada caractere na lingua portuguesa | ||||||
| @@ -42,19 +52,29 @@ def afreq(string): | |||||||
|         else: |         else: | ||||||
|             str_freq[c] = 1 |             str_freq[c] = 1 | ||||||
|  |  | ||||||
|     for c in str_freq: |     freq_sorted = sorted(str_freq.items(), key=lambda item: item[1]) | ||||||
|         if not c.isalnum(): |     freq_sorted = [x[0] for x in freq_sorted] | ||||||
|             continue |     freq_sorted.reverse() | ||||||
|  |  | ||||||
|         str_freq[c] /= len(string) |     print(freq_sorted[0], frequencias[0]) | ||||||
|  |     print(freq_sorted[1], frequencias[1]) | ||||||
|     freq_sorted = dict(sorted(str_freq.items(), key=lambda item: item[1])) |  | ||||||
|  |  | ||||||
|     possiveis_chaves = [] |     possiveis_chaves = [] | ||||||
|     for c in frequencias: |  | ||||||
|         for k in freq_sorted: |     for i, c in enumerate(frequencias): | ||||||
|             if abs(frequencias[c] - freq_sorted[k]) < 0.5: |         if c not in freq_sorted: | ||||||
|                 possiveis_chaves.append(ord(k) - ord(c)) |             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 |     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): | def cesar(string, key): | ||||||
|     new_string = "" |     new_string = "" | ||||||
|  |  | ||||||
| @@ -50,26 +52,28 @@ def cesar(string, key): | |||||||
|         if letter in special_letters: |         if letter in special_letters: | ||||||
|             letter = special_letters[letter] |             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] |         # # [A-Z, a-z, 0-9] | ||||||
|         if ord('0') <= ord(letter) <= ord('9'): |         # if ord('0') <= ord(letter) <= ord('9'): | ||||||
|             if new_letter > ord('9'): |         #     if new_letter > ord('9'): | ||||||
|                 new_letter += 7 # 9 + 1 = A |         #         new_letter += 7 # 9 + 1 = A | ||||||
|             elif new_letter < ord('0'): |         #     elif new_letter < ord('0'): | ||||||
|                 new_letter += 75 # 0 - 1 = z |         #         new_letter += 75 # 0 - 1 = z | ||||||
|         elif letter.isupper(): |         # elif letter.isupper(): | ||||||
|             if new_letter > ord('Z'): |         #     if new_letter > ord('Z'): | ||||||
|                 new_letter += 6 # Z + 1 = a |         #         new_letter += 6 # Z + 1 = a | ||||||
|             elif new_letter < ord('A'): |         #     elif new_letter < ord('A'): | ||||||
|                 new_letter -= 7 # A - 1 = 9 |         #         new_letter -= 7 # A - 1 = 9 | ||||||
|         else: |         # else: | ||||||
|             if new_letter > ord('z'): |         #     if new_letter > ord('z'): | ||||||
|                 new_letter -= 75 # z + 1 = 0 |         #         new_letter -= 75 # z + 1 = 0 | ||||||
|             elif new_letter < ord('a'): |         #     elif new_letter < ord('a'): | ||||||
|                 new_letter -= 6 # a - 1 = Z |         #         new_letter -= 6 # a - 1 = Z | ||||||
|  |  | ||||||
|         new_string += chr(new_letter) |         new_string += new_letter | ||||||
|  |  | ||||||
|     return new_string |     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