ホームページ >Java >&#&チュートリアル >PHP と Java des の暗号化と復号化の例の分析
des 暗号化は、対称暗号化においてインターネットで広く使用されている暗号化方法です。PHP は、mcrypt 拡張ライブラリを通じて des 暗号化をサポートしています。Php で des 暗号化を使用するには、最初に mcrypt 拡張ライブラリをインストールする必要があります。
以下は暗号化と復号化の例です
次のようにコードをコピーします:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND) ;
$key = "これは非常に秘密の鍵です";//Key
$text = "11 時に記念碑の裏で会いましょう。";//という内容暗号化する必要があります
echo ($text) . "\n";
$crypttext =base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv));
echo $crypttext 。 "\n";//暗号化後の内容
echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_decode($crypttext),MCRYPT_MODE_ECB,$iv);//復号後の内容
通常 AES 暗号化アルゴリズムで使用される MCRYPT_RIJNDAEL_128、MCRYPT_RIJNDAEL_192、MCRYPT_RIJNDAEL_256 の 3 種類があり、次の 128、192、256 は秘密鍵 (つまり暗号化された Key) のビット数を表します。が使用されている場合、このアルゴリズムを使用して暗号化されたときの秘密鍵の長さは 128 ビットです。たとえば、 $key = 'fjjda0&9^$$# *%$fada' (これは 20 文字) の場合、最初の 16 文字のみが暗号化されます。実際の暗号化 (16*8=128) に使用されます。これは 128 ビット未満の PHP で発生します。完了するには '\0' を使用してください。
プロジェクトのドッキングを行うときに、相手が Java を使用しているのに、自分は Php 暗号化を使用していることがあります。ドッキング プロセス中に、相手は暗号化されたコンテンツを復号化できないことがわかります。これは、次の理由によるものです。このアルゴリズムを実装する場合、Php と Java には違いがあります。正しい暗号化と復号化には、両側で次の処理が必要です。
PHP:
コードをコピーします。 コードは次のとおりです。
class Security {
public static function encrypt($input, $key) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input =セキュリティ:: pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init( $td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td); ($data);
return $data;
}
プライベート静的関数 pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat( chr($pad), $pad);
}
public static function decrypt($sStr, $sKey) {
$decrypted = mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$sKey ,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
$dec_s = strlen($ decrypted);
$padding = ord($decrypted[$dec_s-1] );
;
#$key = "1234567891234567";
$data = "例";
$value = Security::encrypt($data, $key);
echo $ value.'
';
echo Security::decrypt($value, $key);
Java:
コードコードを次のようにコピーします。 :
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public class Security {
public static String encrypt(String input, String key){
byte[] crypted = null;
試してみる{
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
暗号 cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
crypted = cipher.doFinal(input.getBytes());
}catch(Exception e){
System.out.println(e.toString());
}
return new String(Base64.encodeBase64(crypted));
}
public static String decrypt(String input, String key){
byte[] 出力 = null;
試してみる{
SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
暗号 cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
出力 = cipher.doFinal(Base64.decodeBase64(input));
}catch(例外 e){
System.out.println(e.toString());
}
新しい文字列(出力)を返します。
}
public static void main(String[] args) {
String key = "1234567891234567";
文字列データ = "例";
System.out.println(Security.encrypt(data, key));
System.out.println(Security.decrypt(Security.encrypt(data, key), key));
}
}
以上がPHP と Java des の暗号化と復号化の例の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。