1099511627776ビットの大きさ(ええ、137 GB)の桁の値でPythonを機能させるにはどうすればよいですか?私はこれを実装する必要があるものがいくつかあります(またはそれを行うためのより良い方法を提案できる場合は、メソッドを変更します)。どうやら、pgpの新しい長さタイプには2つではなく3つのセクションがあります。現在は、長さタイプ、長さの値タイプ、および長さです。長さのタイプは2ビットで、これは191バイト、8383バイト、4294967296バイト、または部分的な長さに変換されます。次に、長さはバイト単位でエンコードされます。できない場合でも、値が4294967296バイト未満であるかどうかを確認するにはどうすればよい1 << (4294967296 << 8)
ですか?大きすぎて長めでも収まりません。
4 に答える
long に収まるには大きすぎるだけでなく、大きすぎてどのコンピュータのメモリにも収まりません。あなたは何かを誤解していると思います。
私が理解しているように、最大のキー値は 4,294,967,295 バイトです。137GBではなく4GBです。そのキーを 1 つの数値としてではなく、バイトの文字列としてメモリに保持します。そのため、137 GB の大きな数値をどこから取得したのかわかりません。
もし PGP がそれを必要とするなら、実装するのは不可能でしょう。実装があるので、それが行われる方法ではないと確信しています。
(また、Python 用の PGP モジュールがあると確信していますが、必要だからではなく、練習や学習のためにこれを行っているのであれば、それを続けてください!)
GMPYのような多数のライブラリを使用します。
の3つの引数形式を使用しpow()
ます。
私は RFC4880 (2007 年 11 月) を別様に解釈します。セクション 3.2 では、多倍長整数は長さが 2 オクテットであるため、最大サイズは 64KB であると説明されています。セクション 4.2.2 では、新しいパケット形式について説明し、説明しているスケールの番号を文書化しています。ただし、パケット形式は多倍長整数形式と同じではありません。異なる解釈をしている場合は、読んでいる RFC の正確なセクションで質問を更新してください。