使用 TripleDes、PKCS7 和 ECB 进行 PHP 加密/解密

标签 php encryption pkcs#7 tripledes ecb

我的加密函数可以正常工作,但是我不知道如何让解密函数提供正确的输出。

这是我的加密函数:

function Encrypt($data, $secret)
{    
  //Generate a key from a hash
  $key = md5(utf8_encode($secret), true);

  //Take first 8 bytes of $key and append them to the end of $key.
  $key .= substr($key, 0, 8);

  //Pad for PKCS7
  $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
  $len = strlen($data);
  $pad = $blockSize - ($len % $blockSize);
  $data .= str_repeat(chr($pad), $pad);

  //Encrypt data
  $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

  return base64_encode($encData);

}

这是我的解密函数:

function Decrypt($data, $secret)
{
    $text = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $secret, $text, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $pad   = ord($data[($len = strlen($data)) - 1]);

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

现在我正在使用 test 的 key ,我正在尝试加密 1234567。我从正在寻找的加密中获得了 base64 输出,但是当我去解密时它什么也没有返回(空白区域)。

我不是很精通加密/解密,所以非常感谢任何帮助!!

最佳答案

感谢所有看过我的问题的人。我想我已经解决了,这是我的完整解决方案。希望它能帮助遇到类似问题的其他人:

function Encrypt($data, $secret)
{    
  //Generate a key from a hash
  $key = md5(utf8_encode($secret), true);

  //Take first 8 bytes of $key and append them to the end of $key.
  $key .= substr($key, 0, 8);

  //Pad for PKCS7
  $blockSize = mcrypt_get_block_size('tripledes', 'ecb');
  $len = strlen($data);
  $pad = $blockSize - ($len % $blockSize);
  $data .= str_repeat(chr($pad), $pad);

  //Encrypt data
  $encData = mcrypt_encrypt('tripledes', $key, $data, 'ecb');

  return base64_encode($encData);

}

这是新的解密函数。

function Decrypt($data, $secret)
{

    //Generate a key from a hash
    $key = md5(utf8_encode($secret), true);

    //Take first 8 bytes of $key and append them to the end of $key.
    $key .= substr($key, 0, 8);

    $data = base64_decode($data);

    $data = mcrypt_decrypt('tripledes', $key, $data, 'ecb');

    $block = mcrypt_get_block_size('tripledes', 'ecb');
    $len = strlen($data);
    $pad = ord($data[$len-1]);

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

在运行 mycrypt_decrypt 函数之前,我必须添加相同的代码以生成正确格式的 key 。

关于使用 TripleDes、PKCS7 和 ECB 进行 PHP 加密/解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13347528/

相关文章:

google-app-engine - 如何在 Google App Engine 中动态创建加密的 PayPal 按钮?

javascript - 如何限制图片上传的大小?如果超过限制大小则显示消息?

php - 如何在不损失图像质量的情况下从 JPG 中删除 exif?

c# - 使用 ASP.NET MVC 3 创建安全的高分服务

macos - nodejs 密码 ubuntu 没有按预期工作

c++ - PKCS7_sign 返回 null

java - 在 Java 中通过 Bouncy CaSTLe 验证 pkcs7 SignedData

php - 查询返回成功但没有更新行

php - 选择下一个可用的 "bidder number"

python - Vigenère Cipher 函数实现