Skip to main content

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'

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)
	print(abbrs.table([ 'Hash', 'Filename' ], dat))
	for hash, filename in dat:
		os.rename(filename, hash)

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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

filenames_secure-0.0.8-py3-none-any.whl (3.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page