Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP加密数据_Php_Crypt - Fatal编程技术网

用PHP加密数据

用PHP加密数据,php,crypt,Php,Crypt,我有以下代码: $token = $this->hextobin($dataEncrypt); $key = $this->key_192; $iv = $this->iv; $algorithm = 'xxxx'; $mode = 'ecb'; //QUESTION!!! $td = mcrypt_module_open($algorithm, '', $mode, '') ; $iv = substr($iv, 0,

我有以下代码:

    $token = $this->hextobin($dataEncrypt);
    $key = $this->key_192;
    $iv = $this->iv;
    $algorithm = 'xxxx';
    $mode = 'ecb'; //QUESTION!!!
    $td = mcrypt_module_open($algorithm, '', $mode, '') ;
    $iv = substr($iv, 0, mcrypt_enc_get_iv_size($td));
    $expected_key_size = mcrypt_enc_get_key_size($td);
    $key = substr($key, 0, $expected_key_size);
    mcrypt_generic_init($td, $key, $iv);
    $response = trim(mdecrypt_generic($td, $token), '');
    mcrypt_generic_deinit($td);
    mcrypt_module_close($td);
    $response = explode(XXXX,$response);
    return $response[0];
但是阅读PHP文档,特别是:会说这已经过时了,建议使用mcrypt_generic()和mdecrypt_generic()进行替换。
我的问题是,如果您以与开放模式相同的方式询问我,如何使用这些函数?

使用
mcrypt\u generic()
的说明如下:

但是,我建议使用更简单的API
mcrypt

用法示例:

mcrypt_encrypt(MCRYPT_3DES, "secret key", "data to encrypt", MCRYPT_MODE_ECB);
我注意到您在
ecb
上有问号。这是此处解释的加密的“模式”:

根据PHP文档:

  • MCRYPT_MODE_ECB(电子码本)适用于随机数据,如加密其他密钥。由于那里的数据短小且随机,欧洲央行的缺点具有有利的负面影响
  • MCRYPT\u MODE\u CBC(密码块链接)特别适用于加密安全性大大提高的文件
  • MCRYPT\u MODE\u CFB(密码反馈)是加密字节流的最佳模式,其中必须对单个字节进行加密
  • b的MCRYPT_模式(8位输出反馈)与CFB相当,但可用于不能容忍错误传播的应用中。它不安全(因为它在8位模式下运行),因此不建议使用它
  • MCRYPT_MODE_NOFB(输出反馈,nbit)与OFB相当,但更安全,因为它根据算法的块大小进行操作
  • MCRYPT_MODE_STREAM是一种额外的模式,包括一些流算法,如“WAKE”或“RC4”
更新 如果您使用的是
CBC
模式,请记住将
iv
设置如下:

$size = mcrypt_get_iv_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($size, MCRYPT_DEV_RANDOM);
echo mcrypt_encrypt(MCRYPT_3DES, "secret key", "data", MCRYPT_MODE_CBC, $iv);

您好,但是使用MCRYPT\u模式\u CBC是否安全?取决于您的加密方式。我认为他们在某种程度上都是安全的。我认为有些人在某些情况下更安全。你加密的是什么类型的数据?我尝试只加密文本,例如我在$u会话中输入的用户id['id_blablabla'],我想ECB可以这样做,因为它可能属于“随机数据”,但如果你想更加安全,请使用CBC。