2012-03-21 7 views
1

私はAES暗号化に問題があり、お客様から "復号化"のPHPサーバーコードが表示されました。奇妙なことに、正確なコードはS.O. (驚かない)。私は顧客が渡したコードがまったく同じコメントだったので、これを見つけました! :)このPHPラインをJavaに移植するにはどうしたらいいですか?

とにかく、this S.Oから取ったPHPコードです。質問。

私は、Javaと同じことをしようとしていますが、私はこの正確なラインが追加されるのか分からない:

$key = 'a16byteslongkey!'; 

$padded_key = $key . str_repeat(chr(0x00), 16); // Argh! 

(!の//なんてこったコメントは私ではなかった注意してください。)

もし32ビットのキーを作るためにchr(0x00)を追加しようとしているのでしょうか?(もし$キーが16なので)もしあれば、どうすればJavaで同じことができますか?

+0

@ジョシュはおそらく私は明らかにすべきである:PHPで何かchr(0x00)は何ですか? –

+0

PHPでは、文字列はバイナリセーフです(文字列内のすべての文字は実際にはバイトです)が、JavaのStringインスタンスは実際にはバイトではなく文字を表します。バイナリ暗号化キーの場合は、おそらく 'String'オブジェクトではなく' Key'クラスのような 'byte []'か何かを使うべきです。 –

+0

@AnotherCode確かに、説明をいただきありがとうございます。 16バイトのキーを16個の0で完成させるために、顧客はサーバ側で「ハッキー」なことをしていたことがわかりました。固定キーに16個の "ゼロ"を埋め込んだ後、32個を追加しました。 ;) –

答えて

2

public static String strRepeat(String toRepeat, int reps){ 
    //Sanity checks go here! 
    StringBuilder sb = new StringBuilder(); 
    for(int x = 0; x < reps; x++){ 
     sb.append(toRepeat); 
    } 
    return sb.toString(); 
} 

今ラインを置き換えることができます。

String paddedKey = key + strRepeat('\0', 16); // Argh! 
+0

+1コメントを尊重する;) –

1

chr(0x00)は、Javaで'\0'で表すことができると思われるASCIIコード0で文字を返す必要があります。ガレスは、これは我々が文字列を繰り返し機能させることができ、この使用してASCIIコード0の文字を返し述べたように

+0

ガースさん、ありがとうございました。 –

関連する問題