[解決済み] パスワードに応じた文字列をエンコードする簡単な方法?
質問
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の記事には、暗号を破るための詳細な手順が書かれているので、適度な決意があれば、誰でも簡単に破ることができます。
関連
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] バイトを文字列に変換する
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み】文字列をdatetimeに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonの非常に便利な2つのデコレーターを解説
-
Python関数の高度な応用を解説
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み】インポートエラー。モジュール名 urllib2 がない
-
[解決済み] ピトニックとはどういう意味ですか?[クローズド]