私は学校の課題で 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 を返します。
これは私がそれを理解した方法であり、機能しますが、正しくないようです。私はこれを正しく解釈しましたか、それとも完全に根拠がありませんか? 私がそうなら、誰かが私を正すことができますか? (私はコードを求めているわけではありません。これは誰かの盗用をしたくない割り当てのためなので、誰かが私が何をすべきかを簡単な英語で教えてくれたり、疑似コードで見せてくれたりしたら、それは素晴らしいことです. )
いつものように、事前にみんなに感謝します!