"AES/ECB/PKCS5Padding"
Oracleのドキュメントで指定されているように、Javaのデフォルトはデフォルトです。
モードまたはパディングが指定されていない場合、モードおよびパディングスキームのプロバイダー固有のデフォルト値が使用されます。たとえば、SunJCEプロバイダーは、デフォルトモードとしてECBを使用し、DES、DES-EDE、およびBlowfish暗号のデフォルトのパディングスキームとしてPKCS5Paddingを使用します。これは、SunJCEプロバイダーの場合は次のことを意味します。
Cipher c1 = Cipher.getInstance("DES/ECB/PKCS5Padding"); and
Cipher c1 = Cipher.getInstance("DES"); are equivalent statements.
OracleのドキュメントでCipherオブジェクトの作成を参照してください。
自分でデバッガを使って確認しました。少なくともAndroid4.0の場合、Androidはデフォルトで同じ暗号化およびパディングモードに設定されているようです(予想どおり)。単一の(値の)バイトのデフォルトプロバイダーを使用した結果は、16進数00
の値を持つパディングされたプレーンテキストです。000F0F0F0F0F0F0F0F0F0F0F0F0F0F0F
これは明らかにPKCS#5のパディングであり、より正確にはPKCS#7のパディングであり、 16バイトのブロック暗号のPKCS#5と同じパディングです。
原則として、どのプロバイダーもデフォルトの「SunJCE」プロバイダーとは異なるデフォルトを持つことができます。ただし、これにより、Oracle/OpenJDKのデフォルトが使用されていると想定しているアプリケーションが破損します。
同僚のプログラマーを暗闇に置くのではなく、モードとパディングを含む文字列全体を指定し、暗号化アルゴリズムのデフォルトに依存しないことSecureRandom
を強くお勧めします(ただし、アルゴリズムの指定は通常推奨されません)。