php 3des加密解密类程序代码

 更新时间:2016年11月25日 15:21  点击:1926
php 3des加密解密是一个在数据传输中常用的一个简单的加密方式了,下面我整理了一个php 3des加密解密类程序有需要了解的朋友可进入参考。

3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次DES加密算法。由于计算机运算能力的增强,原版DES密码的密钥长度变得容易被暴力破解;3DES即是设计用来提供一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

 代码如下 复制代码


<?php
class Crypt3Des {
var $key;
function Crypt3Des($key){
$this->key = $key;
}

function encrypt($input){
$size = mcrypt_get_block_size(MCRYPT_3DES,'ecb');
$input = $this->pkcs5_pad($input, $size);
$key = str_pad($this->key,24,'0');
$td = mcrypt_module_open(MCRYPT_3DES, '', 'ecb', '');
$iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
//$data = base64_encode($this->PaddingPKCS7($data));
$data = base64_encode($data);
return $data;
}

function decrypt($encrypted){
$encrypted = base64_decode($encrypted);
$key = str_pad($this->key,24,'0');
$td = mcrypt_module_open(MCRYPT_3DES,'','ecb','');
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td),MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
@mcrypt_generic_init($td, $key, $iv);
$decrypted = mdecrypt_generic($td, $encrypted);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$y=$this->pkcs5_unpad($decrypted);
return $y;
}

function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}

function pkcs5_unpad($text){
$pad = ord($text{strlen($text)-1});
if ($pad > strlen($text)) {
   return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad){
   return false;
}
return substr($text, 0, -1 * $pad);
}

function PaddingPKCS7($data) {
$block_size = mcrypt_get_block_size(MCRYPT_3DES, MCRYPT_MODE_CBC);
$padding_char = $block_size - (strlen($data) % $block_size);
$data .= str_repeat(chr($padding_char),$padding_char);
return $data;
}
}

用法:

$crypt = new Crypt3Des('密钥');
$a = '待加密字符串';
$code = $crypt->encrypt($a);//加密
echo $crypt->decrypt($code);//解密

防止sql注入不但是新学的程序员朋友需要深入了解的一个重要知识点之外,还是我们这些写了多年程序的朋友也必须注意的东西,下面给新手介绍php 防止查询的sql攻击的一些例子,希望对各位会有所帮助。

一个入门级别的例子

 代码如下 复制代码

$k = $_REQUEST['k'];

$k = addslashes($k);//转义:单引号,双引号,反斜线,NULL

$k = str_replace('%', '\%', $k);

$k = str_replace('_', '\_', $k);

$sql = "select * from users where name like '%$k%'";

if(!empty($k)){

$res = mysql_query($sql, $con) or die(mysql_error());

if($row = mysql_fetch_assoc($res)){

foreach($row as $k=>$v){

echo $row[$k].':'.$row[$v].'<br />';

}

}

}else{

echo '******';

}

补充

mysql_real_escape_string()

所以得SQL语句如果有类似这样的写法:

"select * from cdr where src =".$userId; 都要改成 $userId=mysql_real_escape_string($userId)

例子

 代码如下 复制代码

<?php
 
$clean = array();
$mysql = array();
 
$clean['last_name'] = "O'Reilly";
$mysql['last_name'] = mysql_real_escape_string($clean['last_name']);
 
$sql = "INSERT
      INTO   user (last_name)
      VALUES ('{$mysql['last_name']}')";
 
?>

所有有打印的语句如echo,print等 在打印前都要使用htmlentities() 进行过滤,这样可以防止Xss,注意中文要写出

 代码如下 复制代码

htmlentities($name,ENT_NOQUOTES,GB2312) 。

在php应用开发中如果要过滤html标签我们可以直接使用很多函数来实现,但在实际应用中像有一些标签是需要保留的,有一些是要过滤的,下面我就整理了一个完整例子

例子,使用strip_tags()函数过滤所有html

 代码如下 复制代码

$str = '<a href="#">href</a>';
echo htmlspecialchars($str);
echo strip_tags($str);

输出结果为

&lt;a href=&quot;#&quot;&gt;href&lt;/a&gt;

href


上面函数有一个问题就是包括html标签,img标签都过滤掉了,如果我们希望保留图片怎么办

在网上找到一个函数

 代码如下 复制代码

function uh($str)
 {
     $farr = array(
         "/s+/",                                                                   
                        //过滤多余的空白
         "/<(/?)(script|i?frame|style|html|body|title|link|meta|?|%)([^>]*?)>/isu",
   //过滤 <script 等可能引入恶意内容或恶意改变显示布局的代码,如果不需要插入flash等,还可
 以加入<object的过滤
         "/(<[^>]*)on[a-za-z]+s*=([^>]*>)/isu",                                    
 //过滤网页特效的on事件
     
    );
    $tarr = array(
         " ",
         "<123>",           //如果要直接清除不安全的标签,这里可以留空
         "12",
    );
  $str = preg_replace( $farr,$tarr,$str);
    return $str;
 }

这样就可以过滤指定标签了,上面方法还不会我们可参考下面办法

 

 代码如下 复制代码
 <br>$str=preg_replace("/\s+/", " ", $str); //过滤多余回车 <br>$str=preg_replace("/&lt;[ ]+/si","&lt;",$str); //过滤&lt;__("&lt;"号后面带空格) <br><br>$str=preg_replace("/&lt;\!--.*?--&gt;/si","",$str); //注释 <br>$str=preg_replace("/&lt;(\!.*?)&gt;/si","",$str); //过滤DOCTYPE <br>$str=preg_replace("/&lt;(\/?html.*?)&gt;/si","",$str); //过滤html标签 <br>$str=preg_replace("/&lt;(\/?head.*?)&gt;/si","",$str); //过滤head标签 <br>$str=preg_replace("/&lt;(\/?meta.*?)&gt;/si","",$str); //过滤meta标签 <br>$str=preg_replace("/&lt;(\/?body.*?)&gt;/si","",$str); //过滤body标签 <br>$str=preg_replace("/&lt;(\/?link.*?)&gt;/si","",$str); //过滤link标签 <br>$str=preg_replace("/&lt;(\/?form.*?)&gt;/si","",$str); //过滤form标签 <br>$str=preg_replace("/cookie/si","COOKIE",$str); //过滤COOKIE标签 <br><br>$str=preg_replace("/&lt;(applet.*?)&gt;(.*?)&lt;(\/applet.*?)&gt;/si","",$str); //过滤applet标签 <br>$str=preg_replace("/&lt;(\/?applet.*?)&gt;/si","",$str); //过滤applet标签 <br><br>$str=preg_replace("/&lt;(style.*?)&gt;(.*?)&lt;(\/style.*?)&gt;/si","",$str); //过滤style标签 <br>$str=preg_replace("/&lt;(\/?style.*?)&gt;/si","",$str); //过滤style标签 <br><br>$str=preg_replace("/&lt;(title.*?)&gt;(.*?)&lt;(\/title.*?)&gt;/si","",$str); //过滤title标签 <br>$str=preg_replace("/&lt;(\/?title.*?)&gt;/si","",$str); //过滤title标签 <br><br>$str=preg_replace("/&lt;(object.*?)&gt;(.*?)&lt;(\/object.*?)&gt;/si","",$str); //过滤object标签 <br>$str=preg_replace("/&lt;(\/?objec.*?)&gt;/si","",$str); //过滤object标签 <br><br>$str=preg_replace("/&lt;(noframes.*?)&gt;(.*?)&lt;(\/noframes.*?)&gt;/si","",$str); //过滤noframes标签 <br>$str=preg_replace("/&lt;(\/?noframes.*?)&gt;/si","",$str); //过滤noframes标签 <br><br>$str=preg_replace("/&lt;(i?frame.*?)&gt;(.*?)&lt;(\/i?frame.*?)&gt;/si","",$str); //过滤frame标签 <br>$str=preg_replace("/&lt;(\/?i?frame.*?)&gt;/si","",$str); //过滤frame标签 <br><br>$str=preg_replace("/&lt;(script.*?)&gt;(.*?)&lt;(\/script.*?)&gt;/si","",$str); //过滤script标签 <br>$str=preg_replace("/&lt;(\/?script.*?)&gt;/si","",$str); //过滤script标签 <br>$str=preg_replace("/javascript/si","Javascript",$str); //过滤script标签 <br>$str=preg_replace("/vbscript/si","Vbscript",$str); //过滤script标签 <br>$str=preg_replace("/on([a-z]+)\s*=/si","On\\1=",$str); //过滤script标签 <br>$str=preg_replace("/&amp;#/si","&amp;#",$str); //过滤script标签,如javAsCript:alert( <br>


如果只要过滤过滤html标签,js代码,css样式标签

 代码如下 复制代码


<?php
$str = preg_replace( "@<script(.*?)</script>@is", "", $str );
$str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str );
$str = preg_replace( "@<style(.*?)</style>@is", "", $str );
$str = preg_replace( "@<(.*?)>@is", "", $str );
?>

这样即可了哦。

我了解中的php加密与解密方法有很多的,有常用的encrypt与DES加密解密算法了,下面我就给大家整理这两种算法的加密函数例子。

例子,php加密解密的例子

 代码如下 复制代码

加密函数


/*
*功能:对字符串进行加密处理
*参数一:需要加密的内容
*参数二:密钥
*/
function passport_encrypt($str,$key){ //加密函数
 srand((double)microtime() * 1000000);
 $encrypt_key=md5(rand(0, 32000));
 $ctr=0;
 $tmp='';
 for($i=0;$i<strlen($str);$i++){
  $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
  $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
 }
 return base64_encode(passport_key($tmp,$key));
}

解密代码如下:

/*
*功能:对字符串进行解密处理
*参数一:需要解密的密文
*参数二:密钥
*/
function passport_decrypt($str,$key){ //解密函数
 $str=passport_key(base64_decode($str),$key);
 $tmp='';
 for($i=0;$i<strlen($str);$i++){
  $md5=$str[$i];
  $tmp.=$str[++$i] ^ $md5;
 }
 return $tmp;
}

辅助函数:

/*
*辅助函数
*/
function passport_key($str,$encrypt_key){
 $encrypt_key=md5($encrypt_key);
 $ctr=0;
 $tmp='';
 for($i=0;$i<strlen($str);$i++){
  $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
  $tmp.=$str[$i] ^ $encrypt_key[$ctr++];
 }
 return $tmp;
}

使用如下所示

$str='作者:www.111cn.net';
$key='123456';
$encrypt=passport_encrypt($str,$key);
$decrypt=passport_decrypt($encrypt,$key);

echo '原文:',$str."<br><hr>";
echo '密文:',$encrypt."<br><hr>";
echo '译文:',$decrypt."<br><hr>";

DES加密解密函数

 代码如下 复制代码

<?php
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 ( $hexData ); $i += 2) {
   $binData .= chr ( hexdec ( substr ( $hexData, $i, 2 ) ) );
  }
  return $binData;
 }
 
 function pkcs5Pad($text, $blocksize) {
  $pad = $blocksize - (strlen ( $text ) % $blocksize);
  return $text . str_repeat ( chr ( $pad ), $pad );
 }
 
 function pkcs5Unpad($text) {
  $pad = ord ( $text {strlen ( $text ) - 1} );
  if ($pad > strlen ( $text ))
   return false;
  if (strspn ( $text, chr ( $pad ), strlen ( $text ) - $pad ) != $pad)
   return false;
  return substr ( $text, 0, - 1 * $pad );
 }
 
}
?>

以下是测试结果:

$str = '12345678';

$key = '1234abcd';
$crypt = new DES($key);
$mstr = $crypt->encrypt($str);
$str = $crypt->decrypt($mstr);

echo  $str.' <=> '.$mstr;

例子2

 代码如下 复制代码


/**
*加密需通过get方式在url中传递的参数
*/
function args_encode($data) {
if(is_array($data)) {
$string = http_build_query($data);
return base64_encode($string);
} else {
return false;
}
}


/**
*获取url中get方式传递的参数
*/
function getargs() {
$string = base64_decode($_GET['args']);
parse_str($string,$g);
return $g;
}

在这份教程中,我们将会学习到如何阻止用户通过上传不雅图片了,这个测试了一下只有一点作用,但人家真的要做了估计也没有办法了,下面来给大家介绍解决办法吧.


下载:http://www.rrpowered.com/code/RRPowered-NudityFilter.zip


我在phpclasses.org上面偶然发现一个很有用的,由Bakr Alsharif开发的可以帮助开发者基于皮肤像素点来检测图片的类文件.
  它会分析在一张图片的不同部分使用的颜色,并决定其是否匹配人类皮肤颜色的色调.
  作为分析的结果,他会返回一个反映图片包含xx露的可能性的分值.
  此外,他还可以输出被分析的图片,上面对使用给定颜色的肤色的像素进行了标记.
  当前它可以对PNG,GIF和JPEG图片进行分析.

PHP
  下面展示了如何使用这个PHP类.
  让我们先从包含过滤器,nf.php文件开始.

 代码如下 复制代码

include('nf.php');

接下来,创建一个新的名叫ImageFilter的类,然后把它放到一个叫做$filter的变量中.

 

 代码如下 复制代码
$filter = new ImageFilter;

获取图片的分值并将其放到一个$score变量中.

 代码如下 复制代码


$score = $filter -> GetScore($_FILES['img']['tmp_name']);

如果图片分值大于或等于60%,那就展示一条(告警)消息.

 代码如下 复制代码

if($score >= 60){
/*Message*/
}

下面是所有的PHP代码:

 代码如下 复制代码
<?php
/*Include the Nudity Filter file*/
include ('nf.php');
/*Create a new class called $filter*/
$filter = new ImageFilter;
/*Get the score of the image*/
$score = $filter -> GetScore($_FILES['img']['tmp_name']);
/*If the $score variable is set*/
if (isset($score)) {
    /*If the image contains nudity, display image score and message. Score value if more than 60%, it is considered an adult image.*/
    if ($score >= 60) {
        echo "Image scored " . $score . "%, It seems that you have uploaded a nude picture.";
    /*If the image doesn't contain nudity*/   
    } else if ($score < 0) {
        echo "Congratulations, you have uploaded an non-nude image.";
    }
}
?>

标记语言

我们可以使用一个基础的HTML表单上传图片.

 代码如下 复制代码

<form method="post" enctype="multipart/form-data" action="<?php echo $SERVER['PHP_SELF'];?> ">
Upload image:
<input type="file" name="img" id="img" />
<input type="submit" value="Sumit Image" />
</form>

总结

请记得,PHP不能够检测所有的图片,所以不完全可信.我希望你觉得这还有点用处.

 

[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • vue接口请求加密实例

    这篇文章主要介绍了vue接口请求加密实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-12
  • AES加密解密的例子小结

    关于AES加密的算法我们就不说了,这里主要给各位演示了三个关于AES算法实现的加密例子,希望本文章能给你带来帮助。 话不多说,先放上代码,一共有两个文件:AES.php(aes算...2016-11-25
  • node.JS md5加密中文与php结果不一致怎么办

    这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php威盾解密的例子分享

    下面来给大家分享两个关于php威盾解密的例子,一个是批量解密一个是超级算法的解密都非常的好,大家有举的进入参考。 例子,批量解密 代码如下 复制代码 ...2016-11-25
  • NODE.JS加密模块CRYPTO常用方法介绍

    使用require('crypto')调用加密模块。加密模块需要底层系统提供OpenSSL的支持。它提供了一种安全凭证的封装方式,可以用于HTTPS安全网络以及普通HTTP连接。该模块还提供了一套针对OpenSSL的hash(哈希),hmac(密钥哈希),cipher...2014-06-07
  • C#连接加密的Sqlite数据库的方法

    对数据加密分两种,一种是对数据库本身进行加密,另一种是对数据表中的数据进行加密,下面通过本文给大家介绍C#连接加密的Sqlite数据库的方法,感兴趣的朋友一起看看吧...2020-06-25
  • C# 获取硬盘号,CPU信息,加密解密技术的步骤

    这篇文章主要介绍了C# 获取硬盘号,CPU信息,加密解密技术的步骤,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下...2021-01-16
  • C#实现对文件进行加密解密的方法

    这篇文章主要介绍了C#实现对文件进行加密解密的方法,涉及C#加密与解密的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • php使用异或实现的加解密的方法

    若a=b ^ c;则b=a ^ c (^是异或的意思),php在处理异或的字符时先把字符转化为二进制的ascii值,对这些值进行异或,获取结果后在将ascii值转化为字符...2013-09-26
  • 一组PHP加密解密函数分享

    复制代码 代码如下:<?php/***功能:对字符串进行加密处理*参数一:需要加密的内容*参数二:密钥*/function passport_encrypt($str,$key){ //加密函数srand((double)microtime() * 1000000);$encrypt_key=md5(rand(0, 32000...2014-06-07
  • go语言使用RC4加密的方法

    这篇文章主要介绍了go语言使用RC4加密的方法,实例分析了RC4加密的技巧与实现方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-05-07
  • C#为配置文件加密的实现方法

    这篇文章主要介绍了C#为配置文件加密的实现方法,可实现对配置文件中的敏感信息进行加密,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • c#实现md5加密示例

    这篇文章主要介绍了md5加密,加密结果可以为32位、48位、64位,只要修改一下参数就可以实现...2020-06-25
  • 微信小程序 MD5加密登录密码详解及实例代码

    这篇文章主要介绍了微信小程序 MD5加密登录密码详解及实例代码的相关资料,这里附有实例代码,需要的朋友可以参考下...2017-01-16
  • C#编写的Base64加密和解密类

    本文给大家汇总介绍了几种C#编写的Base64加密和解密类的代码,从简单到复杂,都能够实现功能,有需要的小伙伴根据自己的项目需求参考下吧。...2020-06-25
  • C#实现的MD5加密功能与用法示例

    这篇文章主要介绍了C#实现的MD5加密功能与用法,结合实例形式分析了C# MD5加密类的定义与使用方法,需要的朋友可以参考下...2020-06-25
  • Android使用RSA加密实现接口调用时的校验功能

    这篇文章主要介绍了Android+Java使用RSA加密实现接口调用时的校验功能,帮助大家更好的利用Android进行开发,感兴趣的朋友可以了解下...2020-12-24
  • C#实现对AES加密和解密的方法

    C#实现对AES加密和解密的方法,需要的朋友可以参考一下...2020-06-25