针对PHP开发安全问题的相关总结(4)

最好的方法是使用mcrypt模块,这个模块包含了超过30中加密方式来保证只有加密者才能解密数据。

<?php
$data = "Stuff you want encrypted";
$key = "Secret passphrase used to encrypt your data";
$cipher = "MCRYPT_SERPENT_256";
$mode = "MCRYPT_MODE_CBC";
function encrypt($data, $key, $cipher, $mode) {
// Encrypt data
return (string)
      base64_encode
        (
        mcrypt_encrypt
          (
          $cipher,
          substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
          $data,
          $mode,
          substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
          )
        );
}
function decrypt($data, $key, $cipher, $mode) {
// Decrypt data
  return (string)
      mcrypt_decrypt
        (
        $cipher,
        substr(md5($key),0,mcrypt_get_key_size($cipher, $mode)),
        base64_decode($data),
        $mode,
        substr(md5($key),0,mcrypt_get_block_size($cipher, $mode))
        );
}
?>

mcrypt函数需要以下信息:

  • 1、待加密数据
  • 2、用来加密和解密数据的key
  • 3、用户选择的加密数据的特定算法(cipher:如 MCRYPT_TWOFISH192,MCRYPT_SERPENT_256, MCRYPT_RC2, MCRYPT_DES, and MCRYPT_LOKI97)
  • 4、用来加密的模式
  • 5、加密的种子,用来起始加密过程的数据,是一个额外的二进制数据用来初始化加密算法
  • 6、加密key和种子的长度,使用mcrypt_get_key_size函数和mcrypt_get_block_size函数可以获取

如果数据和key都被盗取,那么攻击者可以遍历ciphers寻找开行的方式即可,因此我们需要将加密的key进行MD5一次后保证安全性。同时由于mcrypt函数返回的加密数据是一个二进制数据,这样保存到数据库字段中会引起其他错误,使用了base64encode将这些数据转换为了十六进制数方便保存。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对黑区网络的支持。如果你想了解更多相关内容请查看下面相关链接

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/5918.html