Obscure filenames of mp4 files - away from being embarrassed by accidently opening family videos at work!
Project description
filenames_secure
Obscure filenames of mp4 files - away from being embarrassed by accidently opening family videos at work!
Install with: pip install filenames_secure
Obscure filenames of mp4 files - away from being embarrassed by accidently opening family videos at work!
Usage
Simply $ filenames_secure
to obscure and restore.
How it Works
Filenames will be CRC-32'd, with restore record kept in an JSON file in the same folder.
Collisions
If there are hash collisions, a different secure filename will be selected, then the collision check goes again, until there are no collisions - so there should be no risks of getting data lost - however, there are no warranties.
Functional / Stability
If filename A is encoded into B this time, it will be encoded into B again next time, and forever - if there are no collisions that force a change.
Does CRC-32 collide oftenly?
No. It rarely happens. If it occurs, I suggest going out, buying a lottery.
Code
The code is simple:
import os
import abbrs
def current_path():
p = os.path.realpath(__file__)
p = os.path.split(p)[0]
p = os.path.split(p)[-1]
return p
PACKAGE_NAME = current_path()
RC_FILENAME = f'{PACKAGE_NAME}.json'
print(RC_FILENAME)
def make_dat(ls):
def is_mp4(x):
s = x.split('.')
return len(s) >= 2 and (s[-1] == 'mp4' or s[-2] == 'mp4')
def check_collision(d):
for i, v in enumerate(d):
for j in range(i + 1, len(d)):
if d[i][0] == d[j][0]:
return j
dat = [ [ abbrs.cool_hash(i), i ] for i in filter(is_mp4, ls) ]
while True:
i = check_collision(dat)
if i:
print(f'Repairing collision: {dat[i][0]} -> {dat[i][1]}')
dat[i][0] = abbrs.cool_hash(dat[i][0])
else:
break
return dat
def restore():
dat = abbrs.load_json(RC_FILENAME)
for hash, filename in dat:
os.rename(hash, filename)
abbrs.suspend_file(RC_FILENAME)
def secure():
dat = make_dat(os.listdir())
if len(dat) == 0:
print('MP4 files not found.')
return
abbrs.json_dump(RC_FILENAME, dat)
c = 1
for hash, filename in dat:
print(f'{c:2} {hash} = {filename}')
os.rename(filename, hash)
c += 1
def main():
if os.path.exists(RC_FILENAME):
restore()
else:
secure()
if __name__ == '__main__':
main()
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for filenames_secure-0.0.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 518234cbdb895790f8732804b314260f9a0f0e3b51c4a31d0d947b82287d7d97 |
|
MD5 | 7ce0d8217058095ae9ace996d81213e0 |
|
BLAKE2b-256 | 80188d15ed8b1a9e126031fa681f3207f3747a366e220e7b8d19b3ba3fd93b9a |