2016-04-16 9 views
0

私は暗号化の仕組みに関する基本的な理解を示すために非常に単純な暗号化プロジェクトアルゴリズムに取り組んでいます。暗号化アルゴリズムは基本的に標準のASCII文字を整数に変換する 'ord()'関数を使用します。Python:特殊文字を操作可能な整数に変換するには?

私はに実行した問題は、私はまた、例えば、Windowsの実行ファイルの内容(EXE)ファイルを暗号化することができるように私のプログラムを必要とするということです。そうするために、私はあらゆる種類の特殊文字(ASCIIではなく)を私が操作できない整数に変換する必要があります。

私はエンコーディングについて全体の多くを知らないが、各文字の対応する番号を持つASCII文字のマップがあるので私が理解から、「ORDは()」のみ動作します。 EXEファイルの特殊文字を整数に変換する方法を理解できなかったので、少し普遍的に見えるバイトに変換しようとしました(私が間違っていれば修正してください)。

この時点で、私はちょうどEXEファイルを読み込み、(暗号化/復号化の目的のために)その文字に固有の番号に各文字を変換できるようにするソリューションを探しています。

+0

あなたはバイトに値を変換するためのPythonの[構造体](https://docs.python.org/3/library/struct.html)モジュールを使用することができます。 – th3an0maly

+1

'struct'は過剰なので、数値を表すマルチバイト値、またはバイナリストリームの意味の不均一な混合としてバイトを解釈する必要はありません。 –

答えて

3

バイト(ASCII規格など)に割り当てられた意味をバイト自体と混同しています。 ord()は、指定されたバイトの数値を返します。 Pythonはそれらのバイトを解釈し、ASCIIコードポイントがここにもそこにもないことを示しています。

つまり、ord()は、ASCIIテーブルを参照する必要はなく、の任意のバイト値を処理できます。それは、すでに知られているバイト値をとり、Python intオブジェクトを与えるだけです。

バイナリとしてデータを読み込み(ファイルモードにbを追加してファイルを開きます)、ord()を使用します。 Python 2では、結果としてstrのオブジェクトが生成され、そのオブジェクトの各文字は実際には0〜255の範囲のバイト値になります。

注意:Python 3を使用している場合、バイナリこれらの範囲の整数値であることがまだそれが明確になるbytesオブジェクトのモード結果:

>>> b'abc' 
b'abc' 
>>> b'abc'[0] 
97 

インデックスbytesオブジェクト内の個々の点には、整数値を生成し、ord()への呼び出しが必要とされません。

関連する問題