【问题标题】:Convert Java AES Encryption in PHP code encryption在 PHP 代码加密中转换 Java AES 加密
【发布时间】:2019-08-05 07:00:51
【问题描述】:

我正在尝试在 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;
    }

加密OTP("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 那样精确的加密。如何做到这一点

【问题讨论】:

  • link 会帮助你。正是你正在使用的
  • 我已经拥有它并且我已经使用该链接进行 asp 加密它工作正常但是当我加密 opt 并发送到服务器服务器给我无效的数据格式。加密技术有些问题。用于加密 OTP @saur

标签: java php encryption aes


【解决方案1】:
base64_decode(base64_encode($appKey))

我相信你在php中使用key作为字符串字节,而不是作为解码字节数组,试试下面

base64_decode($appKey)

这至少是让人眼前一亮的。还有其他假设,比如我们只能假设 ENCRYPT_CIPHER 是AES/ECB/PKCS5Padding,而且你应该每次都创建一个新的 Cipher 实例,因为 ENCRYPT_CIPHER 可能不是线程安全的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-16
    • 2012-03-28
    • 1970-01-01
    • 2011-02-26
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多