Vive le bon travail! Je suis Ishiguro de GMO Research!
En passant, je pense que vous serez peut-être soudainement invité à crypter avec AES. Pour ceux d'entre vous, cette fois, nous écrirons du code crypté / composite dans un total de trois méthodes: Java et PHP, PHP est OpenSSL et Mcrypt. Il est implémenté avec l'algorithme AES256, le mode ECB, le rembourrage PKCS5.
Java 1.8 PHP 5.6
Java
Par défaut, Java ne peut gérer que des longueurs de clé AES de 128 bits. Pour gérer les clés de 256 bits, il est nécessaire de remplacer le fichier de stratégie Java.
Pour plus de détails, reportez-vous à des articles tels que Rendre AES256 disponible en Java.
aes01.java
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
public class aes01 {
public static void main(String[] args) {
try {
byte[] key = DatatypeConverter.parseBase64Binary(
"Chaîne de clés encodée en base64");
SecretKeySpec sks = new SecretKeySpec(key, "AES");
byte[] input = "La chaîne que vous souhaitez chiffrer".getBytes();
//chiffrement
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, sks);
byte encrypted[] = c.doFinal(input);
System.out.println(DatatypeConverter.printBase64Binary(encrypted));
//Décryptage
c.init(Cipher.DECRYPT_MODE, sks);
byte decrypted[] = c.doFinal(encrypted);
System.out.println(new String(decrypted));
} catch (Exception e) {
e.printStackTrace();
}
}
}
PHP(OpenSSL)
Le chiffrement avec PHP5.3 ou version ultérieure est effectué avec OpenSSL.
aes01.php
<?php
$key = base64_decode("Chaîne de clés encodée en base64");
$input = 'La chaîne que vous souhaitez chiffrer';
//chiffrement
$encrypted = openssl_encrypt($input, 'aes-256-ecb', $key);
echo $encrypted;
//Décryptage
$decrypted = openssl_decrypt($encrypted, 'aes-256-ecb', $key);
echo $decrypted;
Chiffrement de manière obsolète. Ne l'utilisez que lorsque cela est nécessaire. Ou plutôt, c'est trop ennuyeux.
aes02.php
<?php
$key = base64_decode('Chaîne de clés encodée en base64');
$input = 'La chaîne que vous souhaitez chiffrer';
$crypt = new Crypt($key);
//chiffrement
$encrypted = base64_encode($crypt->encrypt($input));
echo $encrypted;
//Décryptage
$decrypted = $crypt->decrypt(base64_decode($encrypted));
echo $decrypted;
class Crypt {
private $__encrypt_key = null;
public $iv = null;
public function __construct($encrypt_key) {
$this->__encrypt_key = $encrypt_key;
}
public function encrypt($input, $algo = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_ECB) {
list($size, $td) = $this->__open($algo, $mode);
$input = $this->__pkcs5Pad($input, $size);
$data = mcrypt_generic($td, $input);
$this->__close($td);
return $data;
}
public function decrypt($input, $algo = MCRYPT_RIJNDAEL_128, $mode = MCRYPT_MODE_ECB) {
list ($size, $td) = $this->__open($algo, $mode);
$input = mdecrypt_generic($td, $input);
$data = $this->__pkcs5Unpad($input);
$this->__close($td);
return $data;
}
private function __open($algo, $mode) {
$size = mcrypt_get_block_size($algo, $mode);
$td = mcrypt_module_open($algo, '', $mode, '');
$this->iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $this->__encrypt_key, $this->iv);
return array($size, $td);
}
private function __close($td){
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
}
public static function __pkcs5Pad($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public static function __pkcs5Unpad($text) {
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) return false;
if (strspn($text, chr($pad), strlen($text) - $pad) !== $pad) return false;
return substr($text, 0, -1 * $pad);
}
}
MCRYPT_RIJNDAEL_128 semble être équivalent à AES256. Il existe également un algorithme appelé MCRYPT_RIJNDAEL_256, mais notez que ce n'est pas le cas.
Pour le moment, il est possible de changer l'algorithme et le mode afin qu'il puisse être utilisé universellement, Je ne sais pas si cela fonctionne vraiment.
c'est tout! Avec cela, il est normal d'être poussé par l'envie de chiffrer AES.
Je suis content que l'OpenSSL de PHP soit très simple. (Petite sensation)
Recommended Posts