0

これは単に私を夢中にさせています。

これが起こったことです:

Python シェルの内部:

>>> from Crypto.Cipher import ARC4
>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> en('abcd')
'\x18\x07\x8a\xdc'
>>> en('abcd')
'\x89>\xa0T'
>>> en('abcd')
'y\xe1-\xfe'
>>> en('abcd')
'\xc7\xf6\x19\xfc'
>>> 

abcd同じ鍵で4回暗号化しました。そして、4回すべてで、異なる暗号化された文字列を取得しました。

そして、私が次のことをしたとき(おそらく、上記のさまざまな暗号化されたメッセージをすべて復号化すると、同じ復号化されたメッセージが表示されるでしょう)。

>>> al  = []
>>> for i in range(10):
    al.append(en('abcd'))


>>> al
['\x81\x05h\x06', '\x11;\x88\xc7', '\xb6\xb9g\x10', '\x1e$\x8c\xca', '\xbdh\xc2\xf0', 'ruiO', '7\xec\x7f\xdf', '\x08\xf3\x90\x8a', '\x1c\x95\xf3(', '\xbd@-\x11']

>>> gl = []
>>> for i in range(10):
    gl.append(de(al[i]))


>>> gl
['\xc8\x0f6\xb7', '\x18y`A', 'tm\x12\t', '\x9c\xf65M', '\xd6\xe8\x02\xa3', 'M\xa5sc', '\x1b\x82|\x08', '\x87\xbd \xd7', '\xd3:f\xd7', '\x05\x81?\xc5']
>>> 

そのため、元のメッセージを一度も受け取りませんでしたabcd..!

なぜこうなった??

どうすればこれを克服できますか??

この問題を解決するのを手伝ってください。

Linux Mint マシンで pyCrypto ライブラリを使用しています。

4

2 に答える 2

6

ACR4 はストリーム暗号です。あなたが思っているように暗号化するわけではありません。これを試して:

en("abcd" * 16)

そして何が起こるか見てください。結果は同じバイトの 16 倍にはなりませんが、質問で試したものと似ています。

同じバイトに暗号化する場合は、ACR4の新しいインスタンスを使用する必要があります。

e1 = ACR4.new('0123456789123456').encrypt
e2 = ACR4.new('0123456789123456').encrypt

assert e1("abcd") == e2("abcd")
于 2013-05-28T08:15:58.667 に答える
3

RC4 はストリーム暗号であるため、一部の平文の暗号化形式は、暗号が既に暗号化した内容に依存します。

>>> encrypted = [en('abcd') for i in range(4)]
>>> encrypted
['(h=\xd5', 'h \x8b\xe2', '\xa3\xb6\x16}', '\xe3\xb0\xda\xe3']
>>> decrypted = [de(x) for x in encrypted]
>>> decrypted
['abcd', 'abcd', 'abcd', 'abcd']

暗号化/復号化を行う前に新しい RC4 オブジェクトを作成すると、期待どおりの結果が得られます。

>>> a = ARC4.new('0123456789123456')
>>> b = ARC4.new('0123456789123456')
>>> de = b.decrypt
>>> en = a.encrypt
>>> al  = []
>>> for i in range(10):
...   al.append(en('abcd'))
... 
>>> gl = []
>>> for i in range(10):
...   gl.append(de(al[i]))
... 
>>> gl
['abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd', 'abcd']
于 2013-05-28T08:22:14.913 に答える