Key length error when trying to store encrypted value into field using gluon.contrib.AES

16 views
Skip to first unread message

Maurice Ling

unread,
Jun 7, 2017, 6:07:55 AM6/7/17
to web2py-users, 1502...@myrp.edu.sg
Hi all,

I am trying to store one or more encrypted values into their respective fields, which has to be decrypted during retrieval process.
The codes that I am trying to follow are from https://groups.google.com/forum/#!msg/web2py/uGFQD0PBefQ; however, I am getting ValueError

<type 'exceptions.ValueError'> Key length must be 16, 24 or 32 bytes


referring to
File "C:\Users\Maurice Ling\Desktop\cynote2-master\gluon\contrib\aes.py", line 94, in setkey
else:
ValueError: Key length must be 16, 24 or 32 bytes

Here are the codes (attached as file) to replicate this problem that I faced:

session.encryptkey = '12345678901234567890123456789012'

from gluon.utils import secure_dumps, secure_loads

def new_entry():
    form = FORM(TABLE(
            TR('Title: ', INPUT(_type='text', _name='title', _size=80)),
            TR('Contents: ', TEXTAREA(_type='text', _name='contents'),
            TR('',INPUT(_type='submit', _name='SUBMIT')))))
    if form.accepts(request.vars, session):
        print len(session.encryptkey)
        cydb.encrypted_entries.insert(title=form.vars.title,
                                      contents=form.vars.contents)
        redirect(URL(r=request, f='entries'))
    return dict(form=form)

cydb = SQLDB('sqlite://cydb.db')

cydb.define_table('encrypted_entries',
                SQLField('title'),
                SQLField('contents'),
                SQLField('modified_on', 'datetime', default=now))

cydb.encrypted_entries.contents.filter_in = lambda value: secure_dumps(value, session.encryptkey)
cydb.encrypted_entries.contents.filter_out = lambda value: secure_loads(value, session.encryptkey)


1. I am sure that '12345678901234567890123456789012' is 32 bytes long, so I am not sure what is happening.

2. I am not able to use SQLFORM as there are other operations involved; hence, the above codes are just to replicate the error.

Can anyone help?

Thank you in advance.

Regards
Maurice
encrypted_test.py
Reply all
Reply to author
Forward
0 new messages