2017-01-31 3 views
-1

私はJavaとC++プログラミングの両方でAES暗号化を達成しようとしています。基本的に、Javaは暗号化されたメッセージをC++言語で書かれたプログラムを持つデバイスに送信します。C++のPSK5パディング

メッセージを暗号化および復号化する秘密鍵を埋め込むJava側では、ECBモードでPSK5パディングスタイルを使用しました。 C++側では、私は同じ結果を達成しようとしています。

私はいくつかのコードを書いており、これは良いアプローチか、他の誰かを試してみるかどうか尋ねたいと思っていました。

string input = "ciao!"; 

char pad[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; 
if(input.length() % 8 != 0) 
{ 
    int missingLength = 8 - (input.length() % 8); 
    for (int i = 0; i<missingLength; i++) 
    { 
     input += pad[missingLength]; 
    } 

} 
+1

http://codereview.stackexchange.com/ –

+0

また、配列には9つの要素があり、ボード全体で%8を実行しています。これはあなたの意図ですか? – efekctive

+0

ああ、それはエラーでした。私の意図は、それをパッドするために私のキーに追加したい01から08バイトまでです。 それ以外は 間違っていますか?私はそれに関連するコードは見つかっておらず、まだ暗号化が新しくなっています。 –

答えて

2
  1. フルサイズのキーを使用して、16、24又は32バイト。あなたの鍵を短くするか、パスワードを使用している場合は、PBKDFG2などの鍵導出関数を使用して、完全長の安全鍵を作成します。
  2. データを埋め込むためにPKCS5(PKCS7)を使用します。これはオプションである必要があります。そのため、コード内で手動で行う必要はありません。

  3. ECBモードを使用しないでください。安全ではありません。ECB modeを参照して、ペンギンまでスクロールしてください。その代わりに、乱数IVでCBCモードを使用し、復号化に使用するためにIVで暗号化されたデータの接頭辞を付けるだけで、秘密にする必要はありません。

キー導出と同様の認証を提供することができるクロスプラットフォーム/言語溶液などRNCryptorを、使用することを検討してください。

+0

RNCryptorがarduinoボードと互換性があるかどうかはわかりませんが、私は見ています。 すみません、私の質問は鍵とは関係なく、データに言いました。 鉱山は単なる単純な例ですが、私の暗号化は非常に安全である必要はありません.JavaがECB/PKCS5暗号モードで使用するのと同じアルゴリズムを試してみたかったのです。私はC++プログラムで同じ結果を得たいと思っていました。それはメッセージを解読するからです。 あなたが知っている限り、私のためにこれを行うことができ、arduinoと互換性のあるライブラリを知っていますか?あるいは、同じ結果を達成するコードを書くことができます。 –

1

秘密鍵はまったく埋め込まれません。パディングされたものがあれば、それは平文メッセージです(平文という単語に惑わされず、AESはビット/バイトで動作します)。

PKCS#5パディング、または128ビットブロックサイズのブロック暗号 - PKCS#7パディング常には平文をパディングします。これにより、パディングバイトとして解釈される可能性のあるバイトで終了しても、あらゆる種類の平文メッセージを暗号化することが可能になります。

私はOpenSSLのような以前に生成されたライブラリを使って、自分自身を作成し​​ないでください。

+0

ありがとうございました。 あなたは本当に私の言い訳をする必要があります、私は私の質問で間違いを犯しました。私が踏み込みたいのは、実際には "平文"のデータです。私が読んでいたことから、あなたがパッドする必要があるバイトに基づいて単純な文字を追加できたと思いました。 あなたが知っている限り、Crypto ++のOpen SSLはarduinoボードと互換性がありますか? JAVAのECB/PKCS#5と同じ結果を達成できますか? –

関連する問題