This commit is contained in:
José Henrique 2023-08-23 09:38:41 -03:00
parent a3306596e1
commit 218aca1a6c
5 changed files with 81 additions and 28 deletions

View File

@ -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)

View File

@ -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
View 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
View 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
View 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