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