2010-12-03 13 views
2

私はhereのコードを使用してDESを使用して暗号化しています。この値をサードパーティのサービスに送信していますが、動作していないようです。 、塩と反復はパラメータ仕様で暗号を初期化作成するためのパラメータとして使用されているコード与えられたコードでDESとパスワードで暗号化

質問:私は繰り返し回数を変更した場合

// Prepare the parameter to the ciphers 
AlgorithmParameterSpec paramSpec = new PBEParameterSpec(salt, iterationCount); 

// Create the ciphers 
ecipher.init(Cipher.ENCRYPT_MODE, key , paramSpec); 
dcipher.init(Cipher.DECRYPT_MODE, key , paramSpec); 

、私は異なる結果を持っています。

ワイヤの反対側で何が使用されているかは、どのように知ることができますか?私がこの第三者サービスから知っている唯一の事は、使用するアルゴリズムはDESであり、もちろん秘密のパスワードです。

私には何が欠けていますか?

+2

FWIW、DESは安全ではないため、誰かがあなたの暗号を真剣に攻撃すると予想される状況では使用しないでください。特定のサービスと通信するのが最も安全な方法であれば、多くのコンピューティングパワーを持っている人にとっては面白いとは思えません。 –

+0

@ David。コメントありがとう。 Yeap、我々はこれを知っている。これはLANで使用されます。 – OscarRyz

答えて

2

「DES」自体は単なる1回の繰り返しです。その後継の「Triple DES」は、各データブロックを3回暗号化します。はアルゴリズムの3回の繰り返しを実行します。 「DES」だけを使用して暗号化を実行することが予想される場合は、正しい反復が1つ必要です。一般的に

  • http://en.wikipedia.org/wiki/Triple_DES
  • http://en.wikipedia.org/wiki/Data_Encryption_Standard

    • は、おもちゃの実装以外の何のために独自の暗号化機能を書くために悪い習慣と考えられています。暗号化のための安全で正確なライブラリの作成は、時には面倒なことがあります。 JavaプラットフォームSE 6の一部であるJava Cryptography Architectureの使用を検討してください。

    +0

    塩はどうですか?関数に関しては、私が指摘したコードはJCAを使用しています。 – OscarRyz

    +0

    トリプルDESは技術的に3回は暗号化しません。 DESアルゴリズムを3回適用して、ブロックを暗号化、復号化してから再度暗号化して暗号化します。 –

    +0

    @Joeel塩はどうですか?私たちは何を使うべきですか? – OscarRyz

    1

    暗号化アルゴリズム(DES)は知っていますが、鍵生成アルゴリズムは知っていません。パスワードからキーを派生させるには、多くの可能性があります。あなたの例のPBEParameterSpecは、PKCS#5アルゴリズムを使用して、パスワードからキーを派生させます。この目的のためには非常に優れたアルゴリズムですが、しばしば人々自身が簡単なアルゴリズムを開発しようとします。ちょうどパスワードまたはいくつかのさらに悪い方法をハッシングする。 どの方法が使用されているかを検出することは容易ではありません。そのサードパーティのサービスを使用している作業中のアプリケーションがある場合は、それをリバースエンジニアリングしてどのように動作するかを調べることができます。