最好的方法是使用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将这些数据转换为了十六进制数方便保存。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对黑区网络的支持。如果你想了解更多相关内容请查看下面相关链接