Конвертировать Java AES Encryption в шифрование кода PHP - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь зашифровать otp в php.У меня есть Java-код, который шифрует OTP, и когда я отправляю этот зашифрованный 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.как этого добиться

1 Ответ

0 голосов
/ 15 марта 2019
base64_decode(base64_encode($appKey))

Я полагаю, вы используете ключ в php как строковые байты, а не как декодированный байтовый массив, попробуйте выполнить следующее:

base64_decode($appKey)

Это по крайней мере то, что кажется глазу. Тем не менее существуют и другие предположения, например, мы можем только предполагать, что ENCRYPT_CIPHER равен AES/ECB/PKCS5Padding, а также вам следует каждый раз создавать новый экземпляр Cipher, так как ENCRYPT_CIPHER может быть не поточнобезопасным

...