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 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决