PHP加密/解密与TripleDes,PKCS7和ECB [英] PHP Encrypt/Decrypt with TripleDes, PKCS7, and ECB

查看:237
本文介绍了PHP加密/解密与TripleDes,PKCS7和ECB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的加密功能正常工作,但我无法弄清楚如何获取解密功能以提供正确的输出。



这是我的加密功能: $ p
$ b $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $
$ key = md5(utf8_encode($ secret),true);

//以$ key的前8个字节,并将它们追加到$ 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);

//加密数据
$ encData = mcrypt_encrypt('tripledes',$ key,$ data,'ecb');

返回base64_encode($ encData);

}

这是我的解密功能:

 函数解密($ 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]);

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

现在我正在使用一个 / code>我正在尝试加密 1234567 。我得到我正在寻找的加密的base64输出,但是当我去解密时,它不会返回任何东西(一个空白区域)。



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

解决方案

感谢任何人谁看看我的问题。我想我已经解决了,这里是我的完整解决方案。希望它有助于出现类似问题的其他人:

 函数加密($ data,$ secret)
{
//从哈希生成一个密钥
$ key = md5(utf8_encode($ secret),true);

//以$ key的前8个字节,并将它们追加到$ 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);

//加密数据
$ encData = mcrypt_encrypt('tripledes',$ key,$ data,'ecb');

返回base64_encode($ encData);

}

这里是新的解密功能。

 函数解密($ data,$ secret)
{

//从哈希生成一个密钥
$ key = md5(utf8_encode($ secret),true);

//以$ key的前8个字节,并将它们追加到$ 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]);

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

我必须添加相同的代码,以正确的格式生成密钥我运行了mycrypt_decrypt函数。


I've got my encryption function working properly however I cannot figure out how to get the decrypt function to give proper output.

Here is my encrypt function:

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);

}

Here is my decrypt function:

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);
}

Right now I am using a key of test and I'm trying to encrypt 1234567. I get the base64 output from encryption I'm looking for, but when I go to decrypt it returns nothing (a blank area).

I'm not very well versed in encryption/decryption so any help is much appreciated!!

解决方案

Thanks for anyone who took a look at my problem. I think I have solved it and here is my full solution. Hopefully it helps out someone else who is having a similar issue:

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);

}

And here is the new decrypt function.

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);
}

I had to add the same code for generating the key in the correct format before I ran the mycrypt_decrypt function.

这篇关于PHP加密/解密与TripleDes,PKCS7和ECB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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