2016-11-20 5 views
-2

私は以下のコードを使用して、ECBとPKSC5パディングでトリプルDESエンコーディングを実装しています。私が使用している秘密鍵は、生folder.Iでの鍵は、なぜ私はこの例外を取得していますし、どこで間違ったつもり トリプルDES encoding-java.security.InvalidKeyException:キーサイズは128または192ビットでなければなりません

exception-以下
java.security.InvalidKeyException: key size must be 128 or 192 bits 

を取得していますか?

public byte[] encrypt(String message) throws Exception { 

     getResources().getIdentifier("key", 
       "raw", getPackageName()); 
     byte[] bytes = new byte[1024]; 
     try { 
      BufferedInputStream buf = new BufferedInputStream(getResources().openRawResource(
        getResources().getIdentifier("key", 
          "raw", getPackageName()))); 
      buf.read(bytes, 0, bytes.length); 
      buf.close(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     final SecretKey key = new SecretKeySpec(bytes, "DESede/ECB/PKCS5Padding"); 
     final Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); 
     cipher.init(Cipher.ENCRYPT_MODE,key); 

     final byte[] plainTextBytes = message.getBytes("utf-8"); 
     final byte[] cipherText = cipher.doFinal(plainTextBytes); 

     return cipherText; 
    } 
+1

この例外は、おそらく明確にすることはできませんでした。 –

+0

@JamesKPolk私は上記の例外のcipherText bcozに文字列を隠すことができません。「その例外はおそらくもっと明確になることはできませんでした」という意味ではわかりません。 – Bhuvi

+0

@Bhuvi ECBモードを使用しないでください。安全ではありません。[ECBモード](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29)を参照して、ペンギンまでスクロールしてください。 代わりにランダムIVのCBCモードを使用して、復号化に使用するためにIVで暗号化されたデータのプレフィックスを付けるだけです。 3DESは新作では使用できません。 – zaph

答えて

0

キーとして長さ1024の配列を渡しました。キーは長さ16(128ビット)または24(192ビット)のいずれかでなければなりません。 1024はどちらの番号でもありません。

読み取りのためにオーバーロードしている場合は、読み取り後にアレイを適切なサイズにトリムします。

+0

16バイトのキーは、実装によっては動作しないかもしれません。 3DESキーは24バイトで、OPが使用している実装では16バイトまたは24バイトが使用され、16バイトバージョンでは一部が再利用されているようです。キーサイズは56ビット、112ビットおよび168ビットであり、各バイトのlsbは無視され、これは以前はパリティであったことに注意してください。 – zaph

関連する問題