mirror of
https://github.com/rclone/rclone.git
synced 2024-12-23 07:29:35 +01:00
Added decrypt_names.py to help decoding encrypted logs
This commit is contained in:
parent
ce1b9a7daf
commit
3f288bc9ea
59
bin/decrypt_names.py
Executable file
59
bin/decrypt_names.py
Executable file
@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
"""
|
||||||
|
This is a tool to decrypt file names in rclone logs.
|
||||||
|
|
||||||
|
Pass two files in, the first should be a crypt mapping generated by
|
||||||
|
|
||||||
|
rclone ls --crypt-show-mapping remote:path
|
||||||
|
|
||||||
|
The second should be a log file that you want the paths decrypted in.
|
||||||
|
|
||||||
|
Note that if the crypt mappings file is large it can take some time to
|
||||||
|
run.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
# Crypt line
|
||||||
|
match_crypt = re.compile(r'NOTICE: (.*?): Encrypts to "(.*?)"$')
|
||||||
|
|
||||||
|
def read_crypt_map(mapping_file):
|
||||||
|
"""
|
||||||
|
Read the crypt mapping file in, creating a dictionary of substitutions
|
||||||
|
"""
|
||||||
|
mapping = {}
|
||||||
|
with open(mapping_file) as fd:
|
||||||
|
for line in fd:
|
||||||
|
match = match_crypt.search(line)
|
||||||
|
if match:
|
||||||
|
plaintext, ciphertext = match.groups()
|
||||||
|
plaintexts = plaintext.split("/")
|
||||||
|
ciphertexts = ciphertext.split("/")
|
||||||
|
for plain, cipher in zip(plaintexts, ciphertexts):
|
||||||
|
mapping[cipher] = plain
|
||||||
|
return mapping
|
||||||
|
|
||||||
|
def map_log_file(crypt_map, log_file):
|
||||||
|
"""
|
||||||
|
Substitute the crypt_map in the log file.
|
||||||
|
|
||||||
|
This uses a straight forward O(N**2) algorithm. I tried using
|
||||||
|
regexps to speed it up but it made it slower!
|
||||||
|
"""
|
||||||
|
with open(log_file) as fd:
|
||||||
|
for line in fd:
|
||||||
|
for cipher, plain in crypt_map.iteritems():
|
||||||
|
line = line.replace(cipher, plain)
|
||||||
|
sys.stdout.write(line)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) < 3:
|
||||||
|
print "Syntax: %s <crypt-mapping-file> <log-file>" % sys.argv[0]
|
||||||
|
raise SystemExit(1)
|
||||||
|
mapping_file, log_file = sys.argv[1:]
|
||||||
|
crypt_map = read_crypt_map(mapping_file)
|
||||||
|
map_log_file(crypt_map, log_file)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in New Issue
Block a user