coisas
This commit is contained in:
parent
a3306596e1
commit
218aca1a6c
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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.
|
|
@ -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.
|
|
@ -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
|
Loading…
Reference in New Issue