1. ホーム
  2. python

[解決済み] パスワードに応じた文字列をエンコードする簡単な方法?

2022-04-24 02:04:22

質問

Pythonには、パスワードを使った文字列のエンコード/デコードを行う簡単な方法が組み込まれていますか?

こんな感じです。

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

つまり、文字列 "John Doe" は 'sjkl28cn2sx0' として暗号化されるわけです。元の文字列を取得するには、私のソースコード内のパスワードである「mypass」というキーでその文字列を「unlock"」する必要があります。このように、パスワードを使ってWord文書を暗号化/復号化できるようにしたい。

この暗号化された文字列をURLのパラメータとして使用したい。私の目標は難読化であり、強力なセキュリティではありません。私は、キーと値を格納するためにデータベースのテーブルを使用することができることを理解していますが、最小限のものにしようとしています。

どのように解決するのですか?

あなたが のみ から見えなくなるような、単純な難読化を探しています。 非常に サードパーティライブラリを使用しない場合。私はVigenere暗号のようなものをお勧めします。シンプルな古代暗号の中で最も強力なものの一つです。

ビジェネール暗号

手っ取り早く、簡単に実装できる。こんな感じ。

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セーフな文字に置き換えます。

ただし、この 非常に 難読化の薄い層で十分なのです。私がリンクしたWikipediaの記事には、暗号を破るための詳細な手順が書かれているので、適度な決意があれば、誰でも簡単に破ることができます。