将框架从mcrypt转换为openssl

时间:2017-07-21 20:46:06

标签: php mcrypt php-openssl

我正在开发加密会话处理。我提供的示例使用mcrypt,虽然我知道足以修改示例以适用于我的代码,但我不知道将Mcrypt转换为Openssl。

var compare = function(a,b) {
    return (a == b ? true : false);
}

我想知道是否有人可以为此提供OpenSSL等价物?为了记录,我不打算支持Mcrypt,因此不需要向后兼容。

1 个答案:

答案 0 :(得分:2)

因此,经过一些学习和研究,我得出了自己的工作openssl版本,取得了类似的结果。

private function encrypt( $data, $key ) {
    $salt = 'cH!swe!retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39=E@rAsp7c-Ph@pH';
    $iv_size = openssl_cipher_iv_length( "AES-256-CBC-HMAC-SHA256" );
    $hash = hash( 'sha256', $salt . $key . $salt );
    $iv = substr( $hash, strlen( $hash ) - $iv_size );
    $key = substr( $hash, 0, 32 );
    $encrypted = base64_encode( openssl_encrypt( $data, "AES-256-CBC-HMAC-SHA256", $key, OPENSSL_RAW_DATA, $iv ) );

    return $encrypted;
}

private function decrypt( $data, $key ) {
    $salt = 'cH!swe!retReGu7W6bEDRup7usuDUh9THeD2CHeGE*ewr4n39=E@rAsp7c-Ph@pH';
    $iv_size = openssl_cipher_iv_length( "AES-256-CBC-HMAC-SHA256" );
    $hash = hash( 'sha256', $salt . $key . $salt );
    $iv = substr( $hash, strlen( $hash ) - $iv_size );
    $key = substr( $hash, 0, 32 );
    $decrypted = openssl_decrypt( base64_decode( $data ), "AES-256-CBC-HMAC-SHA256", $key, OPENSSL_RAW_DATA, $iv );
    $decrypted = rtrim( $decrypted, "\0" );

    return $decrypted;
}