Я пытаюсь преобразовать метод Java шифрования и дешифрования в PHP.
Это метод шифрования / дешифрования AES с файлом keystore.jks .Мне трудно этого добиться.
Я пытался конвертировать, используя метод mcrypt_encrypt в PHP.Но не смог найти способ сделать это с файлом keystore.jks .
Было бы здорово, если бы вы, ребята, могли прокомментировать, что делает каждая важная строка.
function my_aes_encrypt($key, $data) {
if(16 !== strlen($key)) $key = hash('MD5', $key, true);
$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);
return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_ECB, str_repeat("\0", 16)));
}
function my_aes_decrypt($str, $key){
$str = base64_decode($str);
$str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_ECB);
$block = mcrypt_get_block_size('rijndael_128', 'ecb');
$pad = ord($str[($len = strlen($str)) - 1]);
$len = strlen($str);
$pad = ord($str[$len-1]);
return substr($str, 0, strlen($str) - $pad);
}
public class MainClass {
public static void main(String[] args) {
try {
String ALIAS = "alias";
String KEYSTORE_PASSWORD = "key_pass";
String KEY_PASSWORD = "k_pass";
KeyStore keyStore = KeyStore.getInstance("JCEKS");
FileInputStream stream = new FileInputStream("path/to/keyFile.jks");
keyStore.load(stream, KEYSTORE_PASSWORD.toCharArray());
Key key = keyStore.getKey(ALIAS, KEY_PASSWORD.toCharArray());
String data = "text to encrypt";
//Encrypt Data
String encryptedData = encryptWithAESKey(data, key.getEncoded());
System.out.println("Encrypted Data : " + encryptedData);
//Decrypt Data
System.out.println("Decrypted Data : " +decryptWithAESKey(encryptedData, key.getEncoded()));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static String encryptWithAESKey(String data, byte[] key) throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException {
SecretKey secKey = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, secKey);
byte[] newData = cipher.doFinal(data.getBytes());
return Base64.encodeBase64String(newData);
}
public static String decryptWithAESKey(String inputData, byte[] key) throws NoSuchAlgorithmException,
NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
Cipher cipher = Cipher.getInstance("AES");
SecretKey secKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secKey);
byte[] newData = cipher.doFinal(Base64.decodeBase64(inputData.getBytes()));
return new String(newData);
}
}