so I have a database of information with encrypted customer names. When I 
use a plain python script to decrypt the names it works correctly and 
decrypts all of the customer names.

However, when I used Django it will decrypt only one name and the remaining 
names will still be encrypted.

I encrypt by salting my password key with a 256 bit sha has and then I use 
AES encryption on the data then i base 64 encode it and stick it into the 
db.


Regular Python Script:

def pad(string):
   return string + ((16-len(string) % 16) * '{' )


password = hashlib.sha256("hidmykey").digest()  
IV = 16 * '\x00'
mode = AES.MODE_CBC
decryptor = AES.new(password, mode, IV=IV)


config_values = metering_config('VMStats',['logfile','daemon', 
'pguser','pgpassword','pghost','pgport'])     # 
postgres = psycopg2.connect(database='metering', 
user=config_values['pguser'], 
password=config_values['pgpassword'],host=config_values['pghost'], 
port=config_values['pgport'])
pg_cursor = postgres.cursor()
pg_cursor.execute("set timezone TO 'GMT'")
storage_cursor_pg = postgres.cursor()

customer_list = []
pg_cursor.execute(''' select customer_name, customer_id from customers''')

for customer_name, customer_id in pg_cursor:
   data = base64.b64decode(customer_name)
   plain = decryptor.decrypt(data)
   lenofdec = plain.count('{')
   customer_list.append((plain[:len(plain)-lenofdec], customer_id)) 

this works perfectly fine.


DJANGO



#these are functions django views calls to decrypt the data.

def pad(string):
   return string + ((16-len(string) % 16) * '{' )

def show_name(customer_name):
   password = hashlib.sha256("hidden").digest()  
   IV = 16 * '\x00'
   mode = AES.MODE_CBC
   decryptor = AES.new(password, mode, IV=IV)
   
   data = base64.b64decode(customer_name)
   enc_customer_name = decryptor.decrypt(data)
   lenofdec = enc_customer_name.count('{')
   customer_name = enc_customer_name[:len(enc_customer_name)-lenofdec] 
   return customer_name

The actual django page:


@login_required
def portal(request):
   #define var's
   customer_list = []

   user = request.user
   user_name = request.user.username
   
   user.is_superuser = check_user(user, user_name) #my own custom function 
to do some Active Directory stuff.
          
   if user.is_active and user.is_superuser: 
      customers = Customers.objects.all().order_by('customer_name')
   else:
      customers = Customers.objects.get(customer_id=customer_id_filter)
      
   for customer in customers:
      customer_name = show_name(str(customer.customer_name)) #ive tried 
with and without making it a string.
      customer_list.append((customer_name, int(customer.customer_id)))
              
   current_month = date.today().month
                                                                                
                                                                                
                                                               

   context = Context({'customer_list': customer_list,
                         'user.is_superuser':user.is_superuser, 
                         'current_month':current_month,
                          })
   return render(request, 'portal.html', context)


Here is the output:

as you see below ('TESTCUSTOMER', 81) is decrypted in real life that is a 
customer name that gets decrypted and its always the same name. However in 
my python script outside of django goes through them all and decrypts them.

[('\xa9\xdc\xbf\x86#\x7f4\xc7\xcc\xf1q\x8f3\xe2X\xf3', 26), 
('\x8a\xbc\x16\x90\r-B\x7f\xabU\x1d]\xb9M\xc5\xe3', 142), 
('g\x04\xa3aMk\xe49\xb7\xba\xf2Q4\xc6\xc6\xac', 25), 
("\x92\xbbqA\x0fvE\x94S}\x01|\\BX'", 41), 
('\x07\x9a\xe9\xb1G\\\x8e\xa0\xbe\x83A\x86/\xe5%\xb7', 101), 
('a\xf4\x88\xc0H\xd3\x87\xe1\x05\x18\xe1X\xb8\xe6\xf3\xf3', 23), 
('l\xe7\x9c\xd0\x0eOz\x8d\x85\x94\xeb\xd9\x1c\xc2\x08\xc8', 38), 
('\xd0&\x88,T\xe2(\xac7\xbd\xaa\x90s\x17\xec\xae', 31), 
('\x15"\xf3"\xaf[*\xa8\xe0\xb0;L\xb5\x98\x1a\xef', 30), 
('6\x15$\xddH\xdbw\xef\x03\xec\x8bk,\xbc2\x8a', 32), 
('\x1f\xf4\x08S\x1c\xa5\xf0\x11L\x1b\xbe\xe5Cq\xea3', 28), 
('\xda\x99\xd6\xa8:3bc\x96\x90u\xca\xd3\xc1|L', 22), 
('\xe3*\x9d\x95\x83\x8c\xe4O\x99\x03\x12\xd4\x87\x1f\xc1\xa7', 35), 
(':\x8f\xbc#\x81g\xe5,fk\xca\x0b9\xca\x99&', 24), ('0 
\t\xfb\xafAT\xae\x8d\x0cW\x86\xa2\xf9\x11\x8f', 21), 
('\xce\xe3\x17^\xc5\xabI\x9aT\x80\xcaIm\xc4\xcaS', 36), 
("tA\xe9\xe5S\x90z\xbcw'\x86\x17\x98\xab=[", 37), 
("\\m\xf9e\xe9\xff\xe5X\xfa\xc9@\xc8'Jh\x81", 34), 
('\x15)h\x12\x06\xc6\xfd\x86\xcd\x81\xfa\x10\xb6\xad\xbc\x9f', 121), 
('TESTCUSTOMER', 81), 
('\x15\x8b\x131\xd8\x1c\x04\xf7\x01\xb2\x8b\x84t\x11l\x07', 61), 
('XU\xed+\xad*}\\L[M_\r$`\xc9', 141), 
('l\xc7\xa3\xfc\xc6\xc3\xc5\xe6\xf3\x1ff\nq\x8d\x18"', 29), 
('k\xb8/}Y\xbb\xf5\xe7`R8N(\x81pWy', 33), 
('\x90\n\x07\xe8\xd2R6\x89L\xd8\xe5\x92\x95Q %', 1), ('\x92 
\xad8|!\x82?\xa92\xc3\xe4\x8b7\xb4\x97', 27), 
('1\xbd\x1c\xd1\xd0\xd1\xe7\x89\xa1\xcbKo\x16bW\x9e', 39)] 

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/b25146c0-3819-4dc5-b1c5-875ec2d619f5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to