mirror of https://gitlab.federez.net/re2o/re2o
committed by
root
7 changed files with 139 additions and 6 deletions
@ -0,0 +1,53 @@ |
|||||
|
import string |
||||
|
import binascii |
||||
|
from random import choice |
||||
|
from Crypto.Cipher import AES |
||||
|
|
||||
|
from django.db import models |
||||
|
from django.conf import settings |
||||
|
|
||||
|
EOD = '`%EofD%`' # This should be something that will not occur in strings |
||||
|
|
||||
|
|
||||
|
def genstring(length=16, chars=string.printable): |
||||
|
return ''.join([choice(chars) for i in range(length)]) |
||||
|
|
||||
|
|
||||
|
def encrypt(key, s): |
||||
|
obj = AES.new(key) |
||||
|
datalength = len(s) + len(EOD) |
||||
|
if datalength < 16: |
||||
|
saltlength = 16 - datalength |
||||
|
else: |
||||
|
saltlength = 16 - datalength % 16 |
||||
|
ss = ''.join([s, EOD, genstring(saltlength)]) |
||||
|
return obj.encrypt(ss) |
||||
|
|
||||
|
|
||||
|
def decrypt(key, s): |
||||
|
obj = AES.new(key) |
||||
|
ss = obj.decrypt(s) |
||||
|
return ss.split(bytes(EOD, 'utf-8'))[0] |
||||
|
|
||||
|
|
||||
|
class AESEncryptedField(models.CharField): |
||||
|
def save_form_data(self, instance, data): |
||||
|
setattr(instance, self.name, |
||||
|
binascii.b2a_base64(encrypt(settings.AES_KEY, data))) |
||||
|
|
||||
|
def value_from_object(self, obj): |
||||
|
return decrypt(settings.AES_KEY, |
||||
|
binascii.a2b_base64(getattr(obj, self.attname))).decode('utf-8') |
||||
|
|
||||
|
def to_python(self, value): |
||||
|
if value is None: |
||||
|
return None |
||||
|
return decrypt(settings.AES_KEY, |
||||
|
binascii.a2b_base64(value)).decode('utf-8') |
||||
|
|
||||
|
def from_db_value(self, value, expression, connection, *args): |
||||
|
|
||||
|
if value is None: |
||||
|
return value |
||||
|
return decrypt(settings.AES_KEY, |
||||
|
binascii.a2b_base64(value)).decode('utf-8') |
||||
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-01-14 23:03 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import preferences.aes_field |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('preferences', '0038_auto_20180114_2209'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AddField( |
||||
|
model_name='assooption', |
||||
|
name='payment_id', |
||||
|
field=models.CharField(max_length=255, null=True), |
||||
|
), |
||||
|
migrations.AddField( |
||||
|
model_name='assooption', |
||||
|
name='payment_pass', |
||||
|
field=preferences.aes_field.AESEncryptedField(max_length=255, null=True), |
||||
|
), |
||||
|
] |
||||
@ -0,0 +1,26 @@ |
|||||
|
# -*- coding: utf-8 -*- |
||||
|
# Generated by Django 1.10.7 on 2018-01-14 23:10 |
||||
|
from __future__ import unicode_literals |
||||
|
|
||||
|
from django.db import migrations, models |
||||
|
import preferences.aes_field |
||||
|
|
||||
|
|
||||
|
class Migration(migrations.Migration): |
||||
|
|
||||
|
dependencies = [ |
||||
|
('preferences', '0039_auto_20180115_0003'), |
||||
|
] |
||||
|
|
||||
|
operations = [ |
||||
|
migrations.AlterField( |
||||
|
model_name='assooption', |
||||
|
name='payment_id', |
||||
|
field=models.CharField(default='', max_length=255), |
||||
|
), |
||||
|
migrations.AlterField( |
||||
|
model_name='assooption', |
||||
|
name='payment_pass', |
||||
|
field=preferences.aes_field.AESEncryptedField(default='', max_length=255), |
||||
|
), |
||||
|
] |
||||
Loading…
Reference in new issue