2017-02-13 23 views
2

私の文字列を32の長さに手作業で埋め込むと、私のコードが動作します。
私の質問です:openSSLにデータを埋め込む方法はありますか?openssl_encryptを入力して必要なブロックサイズにする方法を教えてください。

ワーキング:

openssl_encrypt ("my baba is over the ocean1111111", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV); 

が機能していない:

openssl_encrypt ("my baba is over the ocean", 'AES-256-CBC', $MY_SECRET_KEY,OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING,$MY_IV); 

私は自己パディングにより、現在この問題を解決:ルーク公園が言ったように代わり、明示的に使用するようにopenssl_encryptを伝えるの、

$pad = 32 - (strlen("my baba is over the ocean") % 32); 
$clear = "my baba is over the ocean" . str_repeat(chr($pad), $pad); //encrypt this string 
+1

AESのために必要なブロックサイズは、私が0のパディングのあなたの選択は、機械を混乱さ推測している16です。 – jww

+1

現在パディングがゼロの場所の代わりに意図的にパディングスキームとしてPKCS5を使用できませんか? –

+0

@ LukeParkには、それを行うための方法が組み込まれていますか? btw - > notice私はブロックに自分自身を埋め込み、ゼロではない –

答えて

2

OPENSSL_ZERO_PADDINGの場合、パラメータからそのオプションを削除するだけで、def PKCS #7 padding schemeに返す(ブロックの残りの部分を0x0nで埋め込みます。ここで、nは必要なバイト数です。ブロックが既に完了している場合は+ 16 0x00)。 注:このシナリオでは、LukeとPKCS#7が参照するPKCS#5は事実上同一です。 PHP docsから

OPENSSL_ZERO_PADDINGを使用せずに、自動的にPKCS#7パディングを取得します。

だから、呼び出しする必要があります。

openssl_encrypt("my baba is over the ocean", 'AES-256-CBC', $MY_SECRET_KEY, OPENSSL_RAW_DATA, $MY_IV); 
+2

私は混乱した名前を、私はゼロで埋めていくことを意味すると仮定しました。実際にはそれはNO PADDINGとして意味されていました。 –

関連する問題