AES/CBC/PKCS5P在PHP中添加加密在Java中解密
我必须用PHP中给定的密钥加密一个字符串 在Java中,我已经使用了两种方法来解密和加密 下面是我的Java加密方法:AES/CBC/PKCS5P在PHP中添加加密在Java中解密,java,php,encryption,cryptography,Java,Php,Encryption,Cryptography,我必须用PHP中给定的密钥加密一个字符串 在Java中,我已经使用了两种方法来解密和加密 下面是我的Java加密方法: public static String encriptB64Aes(String value, String aesKey) { String result = null; try { Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); //in
public static String encriptB64Aes(String value, String aesKey) {
String result = null;
try {
Cipher encryptCipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
//in PHP !?
SecretKey secretKey = new SecretKeySpec(aesKey.getBytes("UTF-8"), "AES");
IvParameterSpec ivParameterSpec = new IvParameterSpec(secretKey.getEncoded());
encryptCipher.init(Cipher.ENCRYPT_MODE, secretKey, ivParameterSpec);
// Encrypt
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, encryptCipher);
cipherOutputStream.write(value.getBytes());
cipherOutputStream.flush();
cipherOutputStream.close();
byte[] encryptedBytes = outputStream.toByteArray();
result = encodeBase64(encryptedBytes);
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}
我需要在PHP代码中使用mcrypt_module_open使用上述方法
我试过这样一种方法,但我不知道如何像上面那样计算$iv
function encrypt($str, $key) {
$str = pkcs5_pad($str);
$iv = ????;
$td = mcrypt_module_open('rijndael-128', '', 'cbc', '');
mcrypt_generic_init($td, $key, $iv);
$encrypted = mcrypt_generic($td, $str);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode($encrypted);
}
function pkcs5_pad ($text) {
$blocksize = 16;
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
如果你能给我任何帮助,我将不胜感激
感谢在Java代码中,AES密钥分别用作IV。第一块明文数据与AES密钥异或,后者用于加密。方法只返回SecretKey的byte[]表示形式。在您的例子中,IV=$key Wbr,
Juris谢谢您的回复!但是PHP方法不会产生与Java方法相同的字符串:(我对作为键传递给Java方法的字符串感到有点困惑。字符串键的值是多少?