We have 3 files, translated from english text that were encrypted from the same key. Since they are originally english, we can have a general idea of the key by counting the frequency of each character.
cat found* | grep -o . | sort | uniq -c

| letter | ** count** | ** frequency** | ** equals** |
|---|---|---|---|
| P | 2 | 2.8409091e-3 | Z |
| H | 4 | 5.6818182e-3 | Q |
| R | 4 | 5.6818182e-3 | X |
| O | 12 | 0.017045455 | J |
| I | 19 | 0.026988636 | K |
| F | 28 | 0.039772727 | V |
| A | 55 | 0.078125 | B |
| L | 60 | 0.085227273 | P |
| E | 64 | 0.090909091 | Y |
| K | 67 | 0.095170455 | G |
| X | 71 | 0.10085227 | F |
| T | 75 | 0.10653409 | W |
| Y | 84 | 0.11931818 | M |
| M | 86 | 0.12215909 | U |
| W | 129 | 0.18323864 | C |
| V | 130 | 0.18465909 | L |
| Z | 132 | 0.1875 | D |
| D | 210 | 0.29829545 | R |
| C | 227 | 0.32244318 | H |
| G | 227 | 0.32244318 | S |
| N | 240 | 0.34090909 | N |
| B | 246 | 0.34943182 | I |
| U | 257 | 0.36505682 | O |
| J | 301 | 0.42755682 | A |
| Q | 340 | 0.48295455 | T |
| S | 456 | 0.64772727 | E |
| TOTAL | 704 | 1 |
Single Letter Counts and Frequencies:
ciphertext = "<<concatanted>>"
password = "KSVVW BGSJD SVSIS VXBMN YQUUK BNWCU ANMJS"
order = ['E','Q','T','S','O','R','I','N','H','C','L','D','U','P','M','F','W','G','Y','B','K','V','X','Q','J','Z']
def letter_order(string):
counts = [0]*26
order = ""
for i in string:
c = ord(i.upper()) - 65
if -1 < c < 26:
counts[c] += 1
for i in range(26):
m = (0,0)
for j in range(26):
if counts[j] > m[1]:
m = (j,counts[j])
counts[m[0]] = 0
order += chr(65+m[0])
return order
def genkeys(order):
if len(order) == 0:
return [""]
keys = []
for i in range(len(order[0])):
if len(order[0]) > 1:
neworder = [order[0][0:i] + order[0][i+1:]] + order[1:]
else:
neworder = order[1:]
for j in genkeys(neworder):
keys.append(order[0][i]+j)
return keys
def solve(s,orig,ceasar):
solved = ""
for i in s:
if 64 < ord(i.upper()) < 91:
solved += orig[ceasar.find(i.upper())]
return solved
cipherorder = letter_order(ciphertext)
for i in genkeys(order):
print(i)
print(cipherorder)
print(solve(password, i, cipherorder))EQTSORINHCLDUPMFWGYBKVXQJZ
SQJUBNCGDZVWMYTXKELAFIOHRP
WELLDONETHELEVELFOURPQSSWORDISBRUTE
The password is BRUTE