小编典典

根据密码对字符串进行编码的简单方法?

all

Python 是否具有使用密码对字符串进行编码/解码的内置简单方法?

像这样的东西:

>>> encode('John Doe', password = 'mypass')
'sjkl28cn2sx0'
>>> decode('sjkl28cn2sx0', password = 'mypass')
'John Doe'

所以字符串“John
Doe”被加密为“sjkl28cn2sx0”。要获取原始字符串,我将使用密钥“mypass”“解锁”该字符串,这是我源代码中的密码。我希望这是我可以使用密码加密/解密
Word 文档的方式。

我想将这些加密字符串用作 URL
参数。我的目标是混淆,而不是强大的安全性;没有任何关键任务被编码。我意识到我可以使用数据库表来存储键和值,但我正在努力做到极简主义。


阅读 54

收藏
2022-08-24

共1个答案

小编典典

假设您 只是 在寻找简单的混淆,这会掩盖 非常 随意的观察者的东西,并且您不希望使用第三方库。我会推荐像 Vigenere cipher
这样的东西。它是最简单的古代密码之一。

维根密码

它快速且易于实施。就像是:

import base64

def encode(key, string):
    encoded_chars = []
    for i in xrange(len(string)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(string[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = "".join(encoded_chars)
    return base64.urlsafe_b64encode(encoded_string)

解码几乎相同,除了减去密钥。

如果您要编码的字符串很短,和/或很难猜测所用密码的长度,则更难破解。

如果您正在寻找加密的东西,PyCrypto 可能是您最好的选择,尽管之前的答案忽略了一些细节:PyCrypto 中的 ECB 模式要求您的消息长度为 16
个字符的倍数。所以,你必须垫。此外,如果您想将它们用作 URL 参数,请使用base64.urlsafe_b64_encode(),
而不是标准参数。这会将 base64 字母表中的一些字符替换为 URL 安全字符(顾名思义)。

但是,在使用它之前,您应该绝对确定这个 非常
薄的混淆层足以满足您的需求。我链接到的维基百科文章提供了破解密码的详细说明,因此任何有中等决心的人都可以轻松破解它。

2022-08-24