Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django字符域的最小最大长度,用于存储签名者对象(Django.core.signing)的sign方法的输出_Python_Django_Sign_Maxlength - Fatal编程技术网

Python Django字符域的最小最大长度,用于存储签名者对象(Django.core.signing)的sign方法的输出

Python Django字符域的最小最大长度,用于存储签名者对象(Django.core.signing)的sign方法的输出,python,django,sign,maxlength,Python,Django,Sign,Maxlength,我必须签署一个值,在我的电子邮件中,我必须将签署的值存储在Django CharField中。 我正在使用django.core.signing模块的Signer.sign方法。 由于我还想为db字段插入max_length参数,我的问题是,为了始终成功地将其存储在db中,我可以在max_length中输入的最小值是多少。这是他们在 签名字符串的长度为28(包括“:”)加上电子邮件字符串的长度。为了安全起见,我建议您使用Django而不是CharField。事实上,签名令牌的长度随着输入值的增加

我必须签署一个值,在我的电子邮件中,我必须将签署的值存储在Django CharField中。 我正在使用django.core.signing模块的Signer.sign方法。
由于我还想为db字段插入max_length参数,我的问题是,为了始终成功地将其存储在db中,我可以在max_length中输入的最小值是多少。

这是他们在


签名字符串的长度为28(包括“:”)加上电子邮件字符串的长度。为了安全起见,我建议您使用Django而不是CharField。事实上,签名令牌的长度随着输入值的增加而增加:

来自django.core.signing导入签名者的
>>
>>>签名者=签名者()
>>>签名者。签名('a'))
'a:JRYbTbX2xBKZAgJxbzUzsl80vIQ'
>>>签名者。签名('ab')
'ab:THBCYQ9BQPAX4VMAMYESBTF7Y4'
>>>签名者。签名('abc')
“abc:4_rTdYDe18bPklTTKYIsJaB9_oM”
>>>签名者。签名('abcd')
‘abcd:RzGFLsNgRv-LQ4lEorvNPjGH5LM’
>>>签名者。签名('abcde')
'abcde:oOdfJjZ14Jz2F4aHD3pQMBC9fAA'
>>>signer.sign('abcdefghijkl')
‘abcdefghijkl:WZ1GPy4QS7ZOCYXUKGKUFG of XPU’

但是,根据我的测试,令牌的最大大小是
27
。根据此答案,电子邮件地址的最大长度为254个字符<您的
文本字段的code>max_length
属性应为
282
254
+
27
+
1
用于分隔符)。

max_length
没有限制。唯一的限制是MySQL索引的最大长度为767字节,这意味着如果对
CharField
使用索引或唯一约束,且字符集每个字符使用3字节,则限制为255。当使用不同的数据库或无索引时,最大长度没有限制(但可能有其他限制,例如行的大小)。签名使用HMAC和SHA-1作为其哈希函数,然后在base64中编码输出,从base64输出中去除任何填充字符
=
。SHA-1的输出是20个字节,base64将长度增加了33%,因此您在测试中发现的最大27个字节是正确的。
from django.core.signing import Signer
>>> signer = Signer()
>>> value = signer.sign('My string')
>>> value
'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w'