2016-08-24 5 views
0

暗号方式での操作にビットを使用する必要がありますが、変数と関数をBitVector(bitstring/int/textstrings = "")に変換すると、長さが非常に長いビットベクトルになります何千ものこれで、これらのBitVectorでの暗号化と操作が非常に遅くなります。どうすればこれを克服できますか? :(私はビットベクトルを使用している方法のBitVectorのパフォーマンスの問題

例:

msg = BitVector.BitVector(textstring=message)^h1 
    msgxored = msg^h1 

EDIT1:!たとえば、self.bc.encrypt(msgxored, key)のみ〜300ビットですが、encr1 = BitVector.BitVector(textstring = self.bc.encrypt(msgxored, key))は〜3000ビットである

+0

ようにそれを使用することができ、あなたはビットとバイトを混合していないことを確認していますか?また、*「パフォーマンス」*は、通常、時間ベースの測定のために予約されており、スペースベースの測定は予約されていません。時間や空間を意味しますか? –

+0

私はかもしれない....私は時間を意味する! 〜3000ビットなので、時間がかかります。より小さなビットで行われると速くなります(たとえば、別の暗号化スキームでは、より小さなものが生成され、かなり高速になります)。 – user65165

答えて

0

あなたの質問はありませんが多くの情報が。それにもかかわらず、ドキュメントはあなたがあなたのビットベクトルの大きさを設定することができることを述べている。

bv = BitVector(intVal = 0, size = 8) 

希望に役立つこと!

+0

"指定されたサイズがintValに対して可能な最短のビットベクトルを作成するのに要するサイズよりも小さい場合、例外がスローされます。 – user65165

+0

また、サイズはintstだけではなく、ビットストリングとテキストストリングではありません – user65165

+0

この場合は無関係ですが、xor xor(xorを削除する)はBItvectorでどのように機能しますか?私は何か役に立つものも見つけられませんでした – user65165

1

これは恥知らずの自己広告ですが、私はhttps://pypi.python.org/pypi/BytesOpを正確に作成しました。

あなたはこの

from BytesOp import op_xor 
msg=b"asdf" 
h1=b"1234" 
msgxored=op_xor(msg,h1) 
print(msgxored,op_xor(msgxored,h1)) 
+0

良いことがあればね、 これは速いですか、ビットを圧縮しますか? – user65165

+1

バッファからのネイティブの 'char'配列で動作するので、圧縮はまったく必要ありません。あなたはバイトのようなオブジェクトを入れ、新しいバイト列を取り出します。あなたはBitVectorの魅力的なオブジェクトを持っていませんが、シンプルさは(Cの175行(https://github.com/janbrohl/BytesOp/blob/master/bytesop.cpp)のみ) - 明らかに最速ではありませんが可能な実装では、最適化の余地があまりありません。 (私はベンチマークがありません) – janbrohl

+0

私は試してみてください:)あなたに知らせるでしょう – user65165