V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
UnrealEngine
V2EX  ›  PHP

有没有同时懂 C#和 PHP 的大佬,帮看下 C#这段 aes 解密代码怎么翻译成 PHP 的好?

  •  
  •   UnrealEngine · 110 天前 · 597 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。
    public static string AESDecrypt(string text, string key, string iv)
    {
    var result = string.Empty;
    if (key.Length != 16 || iv.Length != 16)
    {
    return result;
    }
    var encryptBytes = System.Convert.FromBase64String(text);
    var aes = System.Security.Cryptography.Aes.Create();
    aes.Mode = System.Security.Cryptography.CipherMode.CBC;
    aes.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
    aes.Key = System.Text.Encoding.UTF8.GetBytes(key);
    aes.IV = System.Text.Encoding.UTF8.GetBytes(iv);
    var transform = aes.CreateDecryptor();
    result = System.Text.Encoding.UTF8.GetString(transform.TransformFinalBlock(encryptBytes, 0, encryptBytes.Length));
    return result;
    }
    第 1 条附言  ·  110 天前
    忘了那个方法加密前还有另一个处理函数,

    字符串:FHPdyFl63G6xl/2rge/VQDkCW79tNG4cAFlnulZHj2shQ1+m1GeY++7MdTX/+KD9/13vDremaHrSMRlg1Wd/HA==

    KEY:1805412879961850

    public static string AESDecrypt(string cipherText, string key)
    {
    var iv = string.Join("", key.ToCharArray().Reverse());
    return AESDecrypt(cipherText, key, iv);
    }
    littleylv
        1
    littleylv   110 天前
    /**
    * decrypt
    *
    * @param string $input string to decrypted
    * @return string string decrypted
    */
    public function decrypt($input)
    {
    $decrypted = openssl_decrypt(base64_decode($input), 'AES-128-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));

    return $decrypted;
    }

    /**
    * hexToStr
    *
    * @param string $hex hex
    * @return string string
    */
    private function hexToStr($hex)
    {
    $string = '';
    $len = strlen($hex);
    for ($i = 0; $i < $len - 1; $i += 2) {
    $string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
    }

    return $string;
    }
    UnrealEngine
        2
    UnrealEngine   110 天前
    @littleylv 不行,哦忘了那个方法加密前还有另一个处理函数,

    字符串:FHPdyFl63G6xl/2rge/VQDkCW79tNG4cAFlnulZHj2shQ1+m1GeY++7MdTX/+KD9/13vDremaHrSMRlg1Wd/HA==

    KEY:1805412879961850

    public static string AESDecrypt(string cipherText, string key)
    {
    var iv = string.Join("", key.ToCharArray().Reverse());
    return AESDecrypt(cipherText, key, iv);
    }
    littleylv
        3
    littleylv   110 天前
    你是一点都不懂 C#还是一点都不懂 PHP 还是都不懂
    我都方法告诉你了,就算你前面有个处理函数,不就是把 key 反转成 iv 吗

    $input = base64_decode('FHPdyFl63G6xl/2rge/VQDkCW79tNG4cAFlnulZHj2shQ1+m1GeY++7 MdTX/+KD9/13vDremaHrSMRlg1Wd/HA==');
    $key = '1805412879961850';
    $iv = strrev($key);
    $decrypted = openssl_decrypt($input, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $iv);
    var_dump($decrypted); // 打印结果:string(49) "{"ActionId":1000,"SourceName":"YF37ZTOVEN6NRZO3"}"
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3766 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 09:43 · PVG 17:43 · LAX 01:43 · JFK 04:43
    ♥ Do have faith in what you're doing.