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 details)

Uploaded Python 3

File details

Details for the file filenames_secure-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: filenames_secure-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 3.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.24.0 setuptools/50.3.1.post20201107 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for filenames_secure-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 ef7c0ad10caeb0816da819b9fecc518354ba2c7af8315e2decc0c002fea4eb18
MD5 b956746e249412f25aeeaf85c503058c
BLAKE2b-256 cdd0d169c87b4ee1a4dc67b6711dd41d87f3edf9c546af1599d91bde828e0178

See more details on using hashes here.

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