コマンドラインのopenSSLからエンコードされたパスワードを(正常に)デコードするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/426294

質問

PyCryptoの使用(OpenSSLバインディングを使用してObjCでもこれを試しましたが):

from Crypto.Cipher import DES
import base64
obj=DES.new('abcdefgh', DES.MODE_ECB)
plain="Guido van Rossum is a space alien.XXXXXX"
ciph=obj.encrypt(plain)
enc=base64.b64encode(ciph)
#print ciph
print enc

のbase64エンコード値を出力します:

ESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg==

あなたが通訳者であった場合、ciphはあなたに与えます

'\x11,\xe3Nq\x8cDY\xdfT\xe2pA\xfa\xad\xc9s\x88\xf3,\xc0j\xd8\xa8\xca\xe7\xe2I\xd15w\x1d61\xc3dgb/\x06'

簡単です。この出力をOpenSSLにパイプしてデコードできるはずです:

b64デコードが機能することを確認するためにテストします-

python enctest.py | openssl enc -base64 -d
+ python enctest.py
+ openssl enc -base64 -d
,?Nq?DY?T?pA???s??,?jب???I?5w61?dgb/

見栄えはよくありませんが、「dgb」で問題なくデコードされていることがわかります。および「Nq」まだあります。

しかし、完全に行きましょう:

python enctest.py | openssl enc -base64 -d | openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ python enctest.py
+ openssl enc -nosalt -des-ecb -d -pass pass:abcdefgh
+ openssl enc -base64 -d
bad decrypt
15621:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:461:
j?7????vc]???LE?m³??q?

間違っているのは何ですか? -k abcdefgh -iv 0000000000000000を使用するか、インタラクティブにパスワードを入力してみました-同じ問題。

役に立ちましたか?

解決

エコーESzjTnGMRFnfVOJwQfqtyXOI8yzAatioyufiSdE1dx02McNkZ2IvBg == | openssl enc -nopad -a -des-ecb -K 6162636465666768 -iv 0 -p -d

6162636465666768はASCIIの「abcdefgh」です; 16進数で書き出されます。

ただし、ECBモードのDESはおそらくパスワードをエンコードするのに適した方法ではなく、「DES暗号」でもないことに注意してください。 Unixシステムで使用されていると聞いたことがあるかもしれません。 (パスワードの場合、通常、逆戻りの難しいアルゴリズムを使用することをお勧めします(保存されたパスワードを復号化する代わりに結果を再生成してパスワードを確認します)。これらの暗号化パスワード、シングルDES特に機密性に関する限り、ECBは選択肢として不適切です。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top