私は現在、JavaのバックグラウンドでPHPを使い始めています。私は基本的な暗号化のためにmcryptを使用していますmcrypt_encrypt (string $cipher , string $key , string $data , string $mode [, string $iv ])
暗号化はうまくいきますが、2つの文字列を連結して暗号化する必要がありますが、私はこれを行うと出力はまるでそれぞれの文字列を別々に暗号化して連結した暗号化の前ではなく、後で。PHP mcrypt - mcryptは、各文字列を連結された文字列にseperatlyで暗読します。
function base64url_encode($data) {
return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');
}
function base64url_decode($data) {
return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}
function encryptCode($data){
return mcrypt_encrypt(MCRYPT_DES , '12345678' , $data , 'cbc' ,'87654321');
}
function decryptCode($data){
return mcrypt_decrypt(MCRYPT_DES , '12345678' , $data , 'cbc' ,'87654321');
}
$id = 'Q2JmDpmqjNmGT4FJ2EkXXITOgc31ZA52';
$toAdd = 'hellothere';
$base64Decoded = base64url_decode($id);
$decrypted = decryptCode($base64Decoded);
$decrypted = $decrypted.$toAdd;
$encryptedID = encryptCode($decrypted);
$base64Encoded = base64url_encode($encryptedID);
print_r($base64Encoded);
と、出力は次のようになります:私は何をやっていることはこれですQ2JmDpmqjNmGT4FJ2EkXXITOgc31ZA52DG4cvxVuJVnkcrINN0Zt9g
私はDESの弱さを認識していますが、私は、この場合にはそのことについてそうしてくださいコメントを、それを必要としません。あなたの助けに感謝します。
'myKey'と 'myIV'は受け入れられない値なので、投稿したコードはまったく動作しません。実際のコードを含めることで、実際にここで何をしているのかを知る必要があります。 – billynoah
@billynoahはい私はそれらが容認できる値ではないことを認識していますが、どのキーまたはivが同じ出力を引き起こすので、実際の問題ではないので、実際の値ではなく、ivおよびkey問題は依然として続く –
mcryptを使用しないことをお勧めします。これは10年近く前から放棄されました。このため、PHP 7.2では非推奨となり、コアからPECLに削除されます。標準のPKCS#7(néePKCS#5)パディングはサポートされていません。バイナリデータでも使用できない非標準のヌルパディングのみがサポートされています。 mcryptには、2003年の傑出したバグがたくさんあります。代わりに、[defuse](https://github.com/defuse/php-encryption)や[RNCryptor](https://github.com/RNCryptor)の使用を検討すると、完全な解決策は、維持されており、正しいです。 – zaph