当前位置: 首页 > 面试题库 >

MCrypt rijndael-128到OpenSSL AES-128-ECB转换

翁宜年
2023-03-14
问题内容

由于不建议使用Mcrypt,因此我想在代码中使用OpenSSL,因为我们已经在服务器中使用 php 7.0.17 ,并且不知道何时升级。

一些第三方API(可能在 PHP 5.x 上托管并使用 mcrypt )正在获取加密数据。他们提供了用于加密/解密字符串的方法。

他们在这

$secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c' ;

public function encrypt128($str)
    {
        $block = mcrypt_get_block_size("rijndael_128", "ecb");
        $pad   = $block - (strlen($str) % $block);
        $str .= str_repeat(chr($pad), $pad);

        return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB));
    }

public function decrypt128($str)
    {
        $str = base64_decode($str);
        $str = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $secret, $str, MCRYPT_MODE_ECB);

        $len = strlen($str);
        $pad = ord($str[$len - 1]);

        return substr($str, 0, strlen($str) - $pad);
    }

small1如果已加密,则使用这些方法字符串v7IXp5vVaFVXXlt/MN8BVw==

我们想openssl_encrypt在我们这边使用,如果我们使用OpenSSL加密相同的字符串,则它必须提供与Mcrypt相同的结果。我研究了使用
rijndael-128 Mode ecb的 mcrypt 应该与OpenSSL兼容aes-128-ecb

在过去的几个小时中,我一直在尝试使用OpenSSL建立自己的方法来加密提供相同结果的字符串。到目前为止,我来了

public function sslEncrypt128($str)
{
    $secret = 'a0a7e7997b6d5fcd55f4b5c32611b87c';
    return base64_encode(openssl_encrypt($str, 'aes-128-ecb', $secret, OPENSSL_RAW_DATA));
}

但是它会产生SxJ3+EdaeItZx3/EwGTUbw==与上述输入相同的字符串。我不知道这是标志的问题还是填充的问题,任何指针都将受到欢迎。

我在这里添加了代码以在线测试https://3v4l.org/v2J2N

提前致谢。


问题答案:

在您的特定示例中,我发现通过更改aes-128-ecbaes-256-ecb,它将产生与旧版相同的输出mcrypt_encrypt



 类似资料:
  • 由于Mcrypt已被弃用,我想在我的代码中使用OpenSSL,因为我们已经在服务器中使用了php7.0.17,并且不知道他们何时升级它。 一些第三方API(可能托管在PHP 5.x上并使用mcrypt)正在获取加密数据。他们提供了用于加密/解密字符串的方法。 他们在这里 使用这些方法string<code>small1</code>如果加密,则变为<code>v7IXp5vVaFVXlt/MN8B

  • 我用Delphi加密“sifrelenecek”字符串,使用AES 128 ECB,使用密钥为“KRPTTT101103”,它给了我“FBE4A4405D6C1B54503D9B213E41AE56”,我正在检查http://aes.online-domain-tools.com/,它是正确的。我试图使用此功能创建相同的PHP加密; 但是php给我的结果是“wL2yf 72thixicjw0duQ

  • 我不知道我做错了什么,在这里试图用给定的密钥解密一串十六进制值,使用ruby的OpenSSL密码AES-128-CTR。 我正在使用gem hex_字符串将我的十六进制转换为字节 我知道我遗漏了一些小东西,因为我有类似的代码实现AES-128-CBC。我是否需要一个计数器,为密文中128字节的每一块递增IV?

  • 我用java编写了这段代码,以便解密密文。我有钥匙。对我来说,一切都是正确的,但我有我要解释的问题。 这是我的代码: 我收到以下错误: 出了什么问题?我知道这个问题在某种程度上与衬垫有关,但我不知道确切的解决方案。我只有一个密文IV和密钥。

  • Ruby代码是 然后 现在PHP代码是 然后我得到 密文和ruby的不一样。现在我尝试用PHP制作的密文解密ruby。 Ruby 'AES-128-CBC '和PHP 'rijndael-128 '加密有区别吗?还有我怎么用ruby解密?

  • 关于AES有很多问题,但我有以下问题。我目前正在使用以下 AES 实现来加密数据 结果是32字节(256位)。所以我使用的是AES-256。这个实现对我来说太慢了。我如何切换到AES-128?我不需要任何填充或操作模式或密钥散列。 提前谢谢你。