首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP代码加密中转换Java加密

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

Stack Overflow用户
提问于 2019-03-14 11:39:25
回答 1查看 260关注 0票数 0

我试图在php中加密otp。我有加密otp的java代码,当我发送加密的otp时,它会像预期的那样在客户端解密。但是当我使用php加密它时,解密不起作用。

实际Java加密:

代码语言:javascript
复制
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加密。

代码语言:javascript
复制
    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那样。如何实现这一目标

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-14 23:00:18

代码语言:javascript
复制
base64_decode(base64_encode($appKey))

我相信您使用php中的键作为字符串字节,而不是作为解码字节数组,尝试如下

代码语言:javascript
复制
base64_decode($appKey)

这至少是眼睛看到的东西。还有其他假设,比如我们只能假设ENCRYPT_CIPHER是AES/ECB/PKCS5Padding,而且每次都应该创建一个新的密码实例,因为ENCRYPT_CIPHER可能不是线程安全的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55161577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档