加密客户端/解密服务器端JS - PHP

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (161)

我尝试使用js进行客户端加密,使用php进行服务器端解密,只进行了几个小时的调试,发现尽管它们具有相同的加密方法,但它们不匹配,无论大小等等。

有许多可用的加密js库,不推荐使用php中的crypt(),mcrypt和函数。

我试着寻找一对(例如AES.js和AES.php),但都没有成功

你能建议一个好的加密方法吗?如何实现它们。因为我相信有一把钥匙或什么,我也听说过IV,我甚至不知道。

jQuery(使用简单的sha256)

$(document).ready(function() {
    $("#login").on("submit", function(event) {
        var pass = $("#pass").val();
        $("#pass").val(CryptoJS.SHA256(pass));
        var data = CryptoJS.AES.encrypt($(this).serialize(), $("#token").val());
        $("#login").submit();
    });
});

我想尝试在php中解密它,但不推荐使用mcrypt_decrypt。有这个openssl,我不知道如何使用。

提问于
用户回答回答于

您可以尝试使用此代码在PHP中解密

$Pass = "Passwort";
$Clear = "Klartext";        

$crypted = fnEncrypt($Clear, $Pass);
echo "Encrypred: ".$crypted."</br>";

$newClear = fnDecrypt($crypted, $Pass);
echo "Decrypred: ".$newClear."</br>";        

function fnEncrypt($sValue, $sSecretKey)
{
    return rtrim(
        base64_encode(
            mcrypt_encrypt(
                MCRYPT_RIJNDAEL_256,
                $sSecretKey, $sValue, 
                MCRYPT_MODE_ECB, 
                mcrypt_create_iv(
                    mcrypt_get_iv_size(
                        MCRYPT_RIJNDAEL_256, 
                        MCRYPT_MODE_ECB
                    ), 
                    MCRYPT_RAND)
                )
            ), "\0"
        );
}

function fnDecrypt($sValue, $sSecretKey)
{
    return rtrim(
        mcrypt_decrypt(
            MCRYPT_RIJNDAEL_256, 
            $sSecretKey, 
            base64_decode($sValue), 
            MCRYPT_MODE_ECB,
            mcrypt_create_iv(
                mcrypt_get_iv_size(
                    MCRYPT_RIJNDAEL_256,
                    MCRYPT_MODE_ECB
                ), 
                MCRYPT_RAND
            )
        ), "\0"
    );
}

我没有检查过,但你可能会尝试。

扫码关注云+社区

领取腾讯云代金券