Python 在脚本中更改Django密钥

Python 在脚本中更改Django密钥,python,django,secret-key,Python,Django,Secret Key,我有一个python脚本,需要在整个执行过程中多次更改django SECRET_密钥。下面是我尝试做的一个例子: from django.core import signing # SECRET_KEY = "abc" print signing.dumps("value") # SECRET_KEY = "123" print signing.dumps("value") # SECRET_KEY = "test" print signing.dumps("value") signing

我有一个python脚本,需要在整个执行过程中多次更改django SECRET_密钥。下面是我尝试做的一个例子:

from django.core import signing

# SECRET_KEY = "abc"
print signing.dumps("value")
# SECRET_KEY = "123"
print signing.dumps("value")
# SECRET_KEY = "test"
print signing.dumps("value")
signing.dumps方法要求已经设置了密钥,但它似乎没有在脚本中更改密钥的参数


如何在脚本中多次更改密钥?

如果仔细查看,您将看到它接受密钥作为签名密钥:

如果key为None,则使用settings.SECRET\u key

因此,每次您都需要传递不同的密钥:

SECRET_KEY = "abc"
print signing.dumps("value", key=SECRET_KEY)
SECRET_KEY = "123"
print signing.dumps("value", key=SECRET_KEY)
也就是说,这对我来说是个坏主意,因为您没有使用默认密钥进行签名。如果您确实需要对文本进行签名,请使用来创建并实例化具有新密钥的对象,并像Signerkey=new key那样使用它。

两件事:

您不需要更改密钥。事实上,如果你这样做了,你将无法取消你已经签署的东西! signing.dumps函数用于复杂数据类型,如字典和元组。 如果您有一个要签名的值,可以执行以下操作:

from django.core.signing import Signer
signer = Signer()
value = signer.sign('My string')
。。。然后在表单发布后,您可以验证签名

try:
    original = signer.unsign(value)
except signing.BadSignature:
    print("Tampering detected!")

您还可以使用:signer=signer'my-other-secret'设置密钥
try:
    original = signer.unsign(value)
except signing.BadSignature:
    print("Tampering detected!")