在PHP代码加密中转换Java AES加密
Convert Java AES Encryption in PHP code encryption
我正在尝试加密 php 中的 otp。我有加密 otp 的 java 代码,当我发送加密的 otp 时,它会按预期在客户端解密。但是当我使用 php 加密它时,解密不起作用。
实际Java加密:
public static final String appKey = "wbx+mGnapzZMietP0gK6muJb/vUU7jnAk9Fe5gTHh4w=";
public static String encryptEK(byte[] plainText, byte[] secret){
try{
SecretKeySpec sk = new SecretKeySpec(secret, AES_ALGORITHM);
ENCRYPT_CIPHER.init(Cipher.ENCRYPT_MODE, sk);
return Base64.encodeBase64String(ENCRYPT_CIPHER.doFinal(plainText));
}catch(Exception e){
e.printStackTrace();
return "";
}
}
public static String encryptOTP(String otp)
{
String encryptedOtp = null;
try {
encryptedOtp = encryptEK(otp.getBytes(),decodeBase64StringTOByte(appKey));
} catch (Exception e) {
e.printStackTrace();
}
return encryptedOtp;
}
encryptOTP("251826")
当前 PhP 加密。
class AtomAES {
public function encrypt_aps_secret($data = '', $key = NULL) {
if($key != NULL && $data != ""){
$method = "AES-256-ECB";
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA);
$result = base64_encode($encrypted);
return $result;
}else{
return "String to encrypt, Key is required.";
}
}
}
$appKey = mb_convert_encoding("wbx+mGnapzZMietP0gK6muJb/vUU7jnAk9Fe5gTHh4w=", "UTF-8");
$enc_otp = $atomAES->encrypt_aps_secret("251826", base64_decode(base64_encode($appKey)));
print_r(json_encode(array("enc_otp"=>mb_convert_encoding($enc_otp, "UTF-8"))));
我需要像 java 使用 php 那样的精确加密。如何做到这一点
base64_decode(base64_encode($appKey))
我相信您将 php 中的键用作字符串字节,而不是解码后的字节数组,请尝试以下操作
base64_decode($appKey)
至少看起来是这样的。还有其他假设,例如我们只能假设 ENCRYPT_CIPHER 是 AES/ECB/PKCS5Padding
,以及每次都应该创建一个新的 Cipher 实例,因为 ENCRYPT_CIPHER 可能不是线程安全的
我正在尝试加密 php 中的 otp。我有加密 otp 的 java 代码,当我发送加密的 otp 时,它会按预期在客户端解密。但是当我使用 php 加密它时,解密不起作用。
实际Java加密:
public static final String appKey = "wbx+mGnapzZMietP0gK6muJb/vUU7jnAk9Fe5gTHh4w=";
public static String encryptEK(byte[] plainText, byte[] secret){
try{
SecretKeySpec sk = new SecretKeySpec(secret, AES_ALGORITHM);
ENCRYPT_CIPHER.init(Cipher.ENCRYPT_MODE, sk);
return Base64.encodeBase64String(ENCRYPT_CIPHER.doFinal(plainText));
}catch(Exception e){
e.printStackTrace();
return "";
}
}
public static String encryptOTP(String otp)
{
String encryptedOtp = null;
try {
encryptedOtp = encryptEK(otp.getBytes(),decodeBase64StringTOByte(appKey));
} catch (Exception e) {
e.printStackTrace();
}
return encryptedOtp;
}
encryptOTP("251826")
当前 PhP 加密。
class AtomAES {
public function encrypt_aps_secret($data = '', $key = NULL) {
if($key != NULL && $data != ""){
$method = "AES-256-ECB";
$encrypted = openssl_encrypt($data, $method, $key, OPENSSL_RAW_DATA);
$result = base64_encode($encrypted);
return $result;
}else{
return "String to encrypt, Key is required.";
}
}
}
$appKey = mb_convert_encoding("wbx+mGnapzZMietP0gK6muJb/vUU7jnAk9Fe5gTHh4w=", "UTF-8");
$enc_otp = $atomAES->encrypt_aps_secret("251826", base64_decode(base64_encode($appKey)));
print_r(json_encode(array("enc_otp"=>mb_convert_encoding($enc_otp, "UTF-8"))));
我需要像 java 使用 php 那样的精确加密。如何做到这一点
base64_decode(base64_encode($appKey))
我相信您将 php 中的键用作字符串字节,而不是解码后的字节数组,请尝试以下操作
base64_decode($appKey)
至少看起来是这样的。还有其他假设,例如我们只能假设 ENCRYPT_CIPHER 是 AES/ECB/PKCS5Padding
,以及每次都应该创建一个新的 Cipher 实例,因为 ENCRYPT_CIPHER 可能不是线程安全的