0

私は学校の課題で RSA 暗号化/復号化の課題を行ってきましたが、実際にすべてが機能しています。私が理解していることを確認したいのは、パディングです。この本には、文字列を数字列 (A = 00、Z = 25) に変換した後、ブロックのサイズを決定し、最後にダミー文字を追加する必要があると記載されています。

本には次のように記載されています。

次に、この文字列を 2N 桁の同じサイズのブロックに分割します。ここで、2N は最大の偶数であり、2N 桁の数値 2525 ... 25 は n を超えません。

25 がどこから得られるかはわからないので、実際の文字キーの最後の文字 (この場合は Z) のインデックスであると推測しました。

だからここに私のPython3実装があります(それはややうんざりする価値があるという公正な警告です):

alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

def __determineSize__(message, n):
    if (n < len(alphabet) - 1):
        raise Exception("n is not sufficiently large")
    buffer = ""
    for i in range(0, n, 2):
        buffer += str(len(alphabet) - 1) #+= "25" in this case
        if (int(buffer) > n):
            groupSize = len(buffer) - 2
            return groupSize

それは 25 ( len(alphabet) = 26, 26 - 1 = 25) で始まり、n より大きくない場合は 2525 に増やします。この時点で大きい場合は、遠くまで行ったことがわかるので停止します。長さ 4 は長すぎるため、長さ 2 を返します。

これは私がそれを理解した方法であり、機能しますが、正しくないようです。私はこれを正しく解釈しましたか、それとも完全に根拠がありませんか? 私がそうなら、誰かが私を正すことができますか? (私はコードを求めているわけではありません。これは誰かの盗用をしたくない割り当てのためなので、誰かが私が何をすべきかを簡単な英語で教えてくれたり、疑似コードで見せてくれたりしたら、それは素晴らしいことです. )

いつものように、事前にみんなに感謝します!

4

0 に答える 0