Ist Prost für gute Arbeit! Ich bin Ishiguro von GMO Research!
Ich denke übrigens, dass Sie plötzlich aufgefordert werden, mit AES zu verschlüsseln. Für diejenigen unter Ihnen werden wir dieses Mal verschlüsselten / zusammengesetzten Code in insgesamt drei Methoden schreiben: Java und PHP, PHP ist OpenSSL und Mcrypt. Es ist mit AES256-Algorithmus, EZB-Modus und PKCS5-Padding implementiert.
Java 1.8 PHP 5.6
Java
Standardmäßig kann Java nur AES-Schlüssellängen von 128 Bit verarbeiten. Um 256-Bit-Schlüssel verarbeiten zu können, muss die Java-Richtliniendatei ersetzt werden.
Weitere Informationen finden Sie in Artikeln wie AES256 in Java verfügbar machen.
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(
"Base64-codierte Schlüsselfolge");
SecretKeySpec sks = new SecretKeySpec(key, "AES");
byte[] input = "Die Zeichenfolge, die Sie verschlüsseln möchten".getBytes();
//Verschlüsselung
Cipher c = Cipher.getInstance("AES/ECB/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, sks);
byte encrypted[] = c.doFinal(input);
System.out.println(DatatypeConverter.printBase64Binary(encrypted));
//Entschlüsselung
c.init(Cipher.DECRYPT_MODE, sks);
byte decrypted[] = c.doFinal(encrypted);
System.out.println(new String(decrypted));
} catch (Exception e) {
e.printStackTrace();
}
}
}
PHP(OpenSSL)
Die Verschlüsselung mit PHP5.3 oder höher erfolgt mit OpenSSL.
aes01.php
<?php
$key = base64_decode("Base64-codierte Schlüsselfolge");
$input = 'Die Zeichenfolge, die Sie verschlüsseln möchten';
//Verschlüsselung
$encrypted = openssl_encrypt($input, 'aes-256-ecb', $key);
echo $encrypted;
//Entschlüsselung
$decrypted = openssl_decrypt($encrypted, 'aes-256-ecb', $key);
echo $decrypted;
Verschlüsselung veraltet. Verwenden Sie es nur bei Bedarf. Oder besser gesagt, es ist zu nervig.
aes02.php
<?php
$key = base64_decode('Base64-codierte Schlüsselfolge');
$input = 'Die Zeichenfolge, die Sie verschlüsseln möchten';
$crypt = new Crypt($key);
//Verschlüsselung
$encrypted = base64_encode($crypt->encrypt($input));
echo $encrypted;
//Entschlüsselung
$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 scheint AES256 zu entsprechen. Es gibt auch einen Algorithmus namens MCRYPT_RIJNDAEL_256, aber beachten Sie, dass dies nicht der Fall ist.
Derzeit ist es möglich, den Algorithmus und den Modus so zu ändern, dass er universell verwendet werden kann. Ich bin mir nicht sicher, ob es wirklich funktioniert.
das ist alles! Damit ist es in Ordnung, vom Drang getrieben zu werden, AES zu verschlüsseln.
Ich bin froh, dass PHPs OpenSSL sehr einfach ist. (Kleines Gefühl)
Recommended Posts