4

opensslフグで暗号化されたパスワードを解読するのに役立つpythonライブラリを探していました。

私はJavaでこれを達成することができましたが、これをサポートするためのpythonライブラリは学習曲線のように見え、自分でローリングする必要がありました.

達成する必要があることに関しては、パスワードは無塩でパスフレーズを使用します。この質問の目的のために、これを「AAAAAAAA」に設定しました。暗号は「Blowfish/CBC/PKCS5Padding」です。暗号化されたテキストは、キーや iv と同じように文字列として読み込まれます。

openssl では、これは「単純に」:

~$ # This is encrypting
~$ echo -n 'password' | openssl enc -bf -nosalt -a -K AAAAAAAA -iv AAAAAAAA
eAIUXziwB8QbBexkiIDR3A==
~$ # This is reversing the encryption
~$ echo 'eAIUXziwB8QbBexkiIDR3A==' | openssl enc -d -bf -nosalt -a -K AAAAAAAA -iv AAAAAAAA
password

Java では、復号化は次の行に沿って行われます。

private static final String KEY = "AAAAAAAA000000000000000000000000";
private static final String IV = "AAAAAAAA00000000";
private static final String FCN = "Blowfish/CBC/PKCS5Padding";
private static final String CN = "Blowfish";

final byte[] encoded = Base64.decode("eAIUXziwB8QbBexkiIDR3A==");
final SecretKeySpec key =
new SecretKeySpec(Hex.decodeHex(KEY.toCharArray()), CN);
final Cipher cipher = Cipher.getInstance(FCN, JCE_PROVIDER);
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(Hex.decodeHex(IV.toCharArray())));
final byte[] decrypted = cipher.doFinal(encoded);
return new String(decrypted);

誰かがPythonのガイダンスを提供できますか?

4

1 に答える 1

2

16 進数および base64 でエンコードされた文字列のデコードが組み込まれています。

In [1]: "AAAAAAAA000000000000000000000000".decode('hex')
Out[1]: '\xaa\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

In [2]: "eAIUXziwB8QbBexkiIDR3A==".decode('base64')
Out[2]: 'x\x02\x14_8\xb0\x07\xc4\x1b\x05\xecd\x88\x80\xd1\xdc'

PyCryptoライブラリは、(とりわけ) BlowFish を処理します

In [1]: from Crypto.Cipher import Blowfish

In [2]: KEY = "AAAAAAAA000000000000000000000000".decode('hex')

In [3]: IV = "AAAAAAAA00000000".decode('hex')

In [4]: cipher = Blowfish.new(KEY, Blowfish.MODE_CBC, IV)

In [5]: ciphertext = "eAIUXziwB8QbBexkiIDR3A==".decode('base64')

In [6]: cipher.decrypt(ciphertext)
Out[6]: 'password\x08\x08\x08\x08\x08\x08\x08\x08'

一度に平文からパディングを取り除きたい場合:

In [14]: cipher.decrypt(ciphertext).replace('\x08', '')
Out[14]: 'password'
于 2012-09-01T13:20:41.070 に答える