Skip to content

Instantly share code, notes, and snippets.

@AdrianoFerrari
Created January 22, 2019 19:40
Show Gist options
  • Save AdrianoFerrari/f3d10d7aff473185e1e5cbd2f14b98c0 to your computer and use it in GitHub Desktop.
Save AdrianoFerrari/f3d10d7aff473185e1e5cbd2f14b98c0 to your computer and use it in GitHub Desktop.
import sys
import plyvel
import re
import hashlib
from Crypto.Cipher import AES
if len(sys.argv) != 4:
print "Invalid arguments. Usage is:"
print "python decrypt.py originalPath targetPath decryptKey"
exit()
print "Original Database Path", sys.argv[1]
print "Target Database Path", sys.argv[2]
print "Decryption Key", sys.argv[3]
raw_input("Press Enter to continue, Ctrl+D to exit")
origDb = sys.argv[1]
targDb = sys.argv[2]
decKey = hashlib.sha256(sys.argv[3]).digest()
db = plyvel.DB(origDb)
newdb = plyvel.DB(targDb, create_if_missing=True)
decryption = AES.new(decKey, AES.MODE_CBC, 'This is the salt')
def unpad(m):
return m[0:-ord(m[-1])]
def decryptContent(value):
match = re.search(r'(.*)"content":"(.*)","children":(.*)', value)
if match:
data = match.group(2)
return match.group(1)+'"content":"'+unpad(decryption.decrypt(data))+'","children":'+match.group(3)
else:
return value
writeBatch = newdb.write_batch()
for key, value in db:
writeBatch.put(key, decryptContent(value))
writeBatch.write()
import sys
import plyvel
import re
import hashlib
from Crypto.Cipher import AES
if len(sys.argv) != 4:
print "Invalid arguments. Usage is:"
print "python encrypt.py originalPath targetPath encryptKey"
exit()
print "Original Database Path", sys.argv[1]
print "Target Database Path", sys.argv[2]
print "Encryption Key", sys.argv[3]
raw_input("Press Enter to continue, Ctrl+D to exit")
origDb = sys.argv[1]
targDb = sys.argv[2]
encKey = hashlib.sha256(sys.argv[3]).digest()
db = plyvel.DB(origDb)
newdb = plyvel.DB(targDb, create_if_missing=True)
encryption = AES.new(encKey, AES.MODE_CBC, 'This is the salt')
def pad(m):
return m+chr(16-len(m)%16)*(16-len(m)%16)
def encryptContent(value):
match = re.search(r'(.*)"content":"(.*)","children":(.*)', value)
if match:
data = pad(match.group(2))
return match.group(1)+'"content":"'+encryption.encrypt(data)+'","children":'+match.group(3)
else:
return value
writeBatch = newdb.write_batch()
for key, value in db:
writeBatch.put(key, encryptContent(value))
writeBatch.write()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment