作者:marco112977 | 来源:互联网 | 2020-08-28 02:37
在平时的开发中,我们经常会对关键字符进行加密,可能为了安全也可能为了规范,今天就将就DES加密正确使用...
前言 :在平时的开发中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,今天就将就DES加密正确使用
任务流程图
片段1
说干就干,我开始编写des加密类 代码如下
class DES
{
var $key;
var $iv; //偏移量
function DES( $key, $iv=0 ) {
//key长度8例如:1234abcd
$this->key = $key;
if( $iv == 0 ) {
$this->iv = $key;
} else {
$this->iv = $iv; //mcrypt_create_iv ( mcrypt_get_block_size (MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM );
}
}
function encrypt($str) {
//加密,返回大写十六进制字符串
$size = mcrypt_get_block_size ( MCRYPT_DES, MCRYPT_MODE_CBC );
$str = $this->pkcs5Pad ( $str, $size );
return strtoupper( bin2hex( mcrypt_cbc(MCRYPT_DES, $this->key, $str, MCRYPT_ENCRYPT, $this->iv ) ) );
}
function decrypt($str) {
//解密
$strBin = $this->hex2bin( strtolower( $str ) );
$str = mcrypt_cbc( MCRYPT_DES, $this->key, $strBin, MCRYPT_DECRYPT, $this->iv );
$str = $this->pkcs5Unpad( $str );
return $str;
}
function hex2bin($hexData) {
$binData = "";
for($i = 0; $i strlen ( $text ))
return false;
if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
return false;
return substr ( $text, 0, - 1 * $pad );
}
}
测试代码
';
$encrypt_str = $crypt->encrypt($str);
echo "加密后的字符是".$encrypt_str.'
';
$decrypt_str= $crypt->decrypt($encrypt_str);
echo "解密后的字符是".$decrypt_str.'
';
效果
原字符是podsmia
加密后的字符是9490E64136137FD8
解密后的字符是podsmia
过了几天,我闲着没事,继续运行一下代码
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; DES5 has a deprecated constructor in D:\phpstudy_pro\WWW\des\DES5.php on line 2
原字符是podsmia
Fatal error: Uncaught Error: Call to undefined function mcrypt_get_block_size() in D:\phpstudy_pro\WWW\des\DES5.php:19 Stack trace: #0 D:\phpstudy_pro\WWW\des\1.php(10): DES5->encrypt('podsmia') #1 {main} thrown in D:\phpstudy_pro\WWW\des\DES5.php on line 19
给我报了 fatalerror 这不科学啊,我什么都没动啊。怎么回事呢。后面经过一番研究。发现是php版本的问题。我之前运行成功,那是因为我用的 是php5.5,但是这次报错我用的是php7.2.。那么我需要找替代方案。。接下来看我操作
片段2
测试代码
';
$encrypt_str = $crypt->desEncrypt($str,$key);
echo "加密后的字符是".$encrypt_str.'
';
$decrypt_str= $crypt->desDecrypt($encrypt_str,$key);
echo "解密后的字符是".$decrypt_str.'
';
效果
原字符是问哪个
加密后的字符是074b8beee21eefca7ec3a60cb8edda18
解密后的字符是问哪个
问题完美解决。大家以后遇到这种问题,直接照搬我的代码即可,方便省事。
更多PHP相关知识,请访问PHP教程!
以上就是php中加密解密DES的正确使用姿势的详细内容,更多请关注 第一PHP社区 其它相关文章!