dongzhaiqiang6108 2019-03-14 11:39
浏览 142
已采纳

在PHP代码加密中转换Java AES加密

I am trying to encrypt the otp in php. i have the java code that encrypt the otp and when i send that encrypted otp it decrypt at client end as expected. but when i encrypt it using php, decryption does not work.

Actual Java Encryption:

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")

Current PhP encryption.

    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"))));

I need the exact encryption as java does using php. how to achieve this

  • 写回答

1条回答 默认 最新

  • dpbv85276 2019-03-14 23:00
    关注
    base64_decode(base64_encode($appKey))
    

    I believe you use the key in php as string bytes, not as a decoded byte array, try following

    base64_decode($appKey)
    

    It is at least what meets the eye. Still there are other assumptions, such as we can only assume ENCRYPT_CIPHER is AES/ECB/PKCS5Padding, as well you should create a new Cipher instance every time, as the ENCRYPT_CIPHER may not be thread-safe

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 cplex运行后参数报错是为什么
  • ¥15 之前不小心删了pycharm的文件,后面重新安装之后软件打不开了
  • ¥15 vue3获取动态宽度,刷新后动态宽度值为0
  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计
  • ¥15 聚类分析 设计k-均值算法分类器,对一组二维模式向量进行分类。
  • ¥15 stm32c8t6工程,使用hal库
  • ¥15 找能接spark如图片的,可议价
  • ¥15 关于#单片机#的问题,请各位专家解答!
  • ¥15 博通raid 的写入速度很高也很低