PHP将MCRYPT_ENCRYPT转换为OPENSSL_ENCRYPT(SOAP头) [英] PHP convert MCRYPT_ENCRYPT to OPENSSL_ENCRYPT (SOAP header)

查看:207
本文介绍了PHP将MCRYPT_ENCRYPT转换为OPENSSL_ENCRYPT(SOAP头)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要对一些SOAP标头字段进行加密,并且当前我在具有PHP 5.6版本的项目中使用以下代码.

I need to encrypt some SOAP header fields, and I currently have the following code working in a project with PHP 5.6 version.

function getBaseEncoded($data, $key)
{
    $size       = $this->pkcs5_pad($data, mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB));
    $iv         = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB), MCRYPT_RAND);
    $result     = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $size, MCRYPT_MODE_ECB, $iv);

    return trim(base64_encode($result));
}

private function pkcs5_pad($text, $blocksize) 
{
   $pad = $blocksize - (strlen($text) % $blocksize);
   return $text . str_repeat (chr($pad), $pad);
}

发生的事情是,现在我手中有一个类似的项目,但使用PHP 7,并且不赞成使用MCRYPT函数,因此需要将其切换为OPENSSL_ENCRYPT.

What happens is that now I have in my hands a similiar project but with PHP 7, and the function MCRYPT is deprecated and I need to switch it to OPENSSL_ENCRYPT.

下面的代码是我的第一次尝试:

The code below is my first attempt:

function getBaseEncoded($data, $key)
{
    $result = openssl_encrypt($data, 'AES-128-ECB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);

    return trim(base64_encode($result));
}

但是我现在收到消息

SoapFault =>无法连接到主机

SoapFault => Could not connect to host

这让我开始思考问题是否出在我的新功能上?

and it got me thinking if the problem is on my new function?

推荐答案

您缺少一些初始化矢量数据.

You are missing some initializator vector data.

$ivsize = openssl_cipher_iv_length('AES-128-ECB');
$iv = openssl_random_pseudo_bytes($ivsize);

$ciphertext = openssl_encrypt(
        $data,
        'AES-128-ECB',
        $key,
        OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING,
        $iv
);

这篇关于PHP将MCRYPT_ENCRYPT转换为OPENSSL_ENCRYPT(SOAP头)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆