md5加密:

string  md5( string $str [,bool $raw output=false])

md5加密方法用的挺多,有两个参数,第一个参数是要加密的字符串,第二个参数默认为false,如果设为true,那么 MD5 报文摘要将以16字节长度的原始二进制格式返回。

使用的示例如下:

<?php
$str="searchingbeyond";
echo md5($str)."<hr>";//2ce99dc76db0515ac9ea72231b6c57ea
echo md5($str,true);//,��m�QZ��r#lW�
?>

  现在md5已经有很多常用的字符串的加密密文,都可以在网上查询到明文,所以单独使用md5加密字符串是不安全的,常见的做法是:(1)在加密前,将明文先加上一个字符串或者其他处理之后再加密,避免直接加密。(2)两次md5加密:直接使用md5加密字符串,然后再将所得的密文进行一次md5加密。

  比如下面的例子:

<?php
$str="searchingbeyond";
echo md5($str."test")."<hr>";//1e41a5c6ef30cfce94206b51c9b125ef
echo md5(md5($str));//ed67b046e6cf3a0263493f123235f3ce
?>

  

Crypt加密:单向字符串散列(单向加密,没有解密)

string crypt ( string $str [, string $salt ] )

函数需要两个参数,第一个参数就是要加密的字符串,第二个参数是干扰参数,如果指定salt,则对于同一字符串的加密结果都相同;如果不指定salt,如果没有提供salt,PHP 将自动生成一个 2 个字符(DES)或者 12 个字符(MD5)的salt。

crypt可以采用多种方法加密,常见的是DES加密和MD5加密。

  • CRYPT_STD_DES - 基于标准 DES 算法的散列使用 "./0-9A-Za-z" 字符中的两个字符作为盐值。如果自己指定salt的话,加密时会取前两个字符作为密文的前两位,即使指定的salt多于2个字符,也只取两位。
  • CRYPT_MD5 - MD5 散列使用一个以 $1$ 开始的 12 字符的字符串盐值。

使用例子如下:

<?php
$str="searchingbeyond"; //使用DES加密
//只是用两个字符
echo crypt($str,"te")."<hr>";//teiLin.tOOl0I
//使用多个字符的结果和使用两个字符的结果是一样的
echo crypt($str,"test")."<hr>";//teiLin.tOOl0I //使用md5方式
//除去$1$$这几个字符,中间最多只有8个字符
echo crypt($str,'$1$hello$')."<hr>";//$1$hello$1FQ6x38RJnfcNH.axVRwW0
//多余8个时只取前8个字符,然后才进行加密
echo crypt($str,'$1$helloworld$')."<hr>";//$1$hellowor$wp9KvKXSOdiLgN6PtkOff/
?>

  

sha1加密,和md5加密类似

string sha1 ( string $str [, bool $raw_output = false ] )

可传入两个参数,第一个参数是加密的字符串,第二个参数如果被设置为 TRUE,那么 sha1 摘要将以 20 字符长度的原始格式返回,否则返回值是一个 40 字符长度的十六进制数字(比md5长一点)。

使用例子如下:

<?php
$str="searchingbeyond"; echo sha1($str)."<hr>";//d6151e17fbf5379371af17cd4224217be6fd1388
echo sha1($str,true)."<hr>";//���7�q��B$!{���
?>

  

以上的三种加密方法都是单向的,但是可以通过一些碰撞,暴力破解,所以可以采取一些额外的操作,比如像类似两次md5等方法。

下面两种方法称为编码技术,存在编码,就存在解码。

URL编码技术

string urlencode(string $str)

传入一个字符串,返回编码(此处是编码,不是加密)字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。

对应的URL解码:

string urlencode(string $str)

还有另外两个函数:

string rawurlencode ( string $str )

string rawurldecode ( string $str )

使用示例如下:

<?php
$str="https://www.cnblogs.com/-beyond?type = php"; //编码
$str1=urlencode($str)."<hr>";
echo $str1;//https%3A%2F%2Fwww.cnblogs.com%2F-beyond%3Ftype+%3D+php //解码
echo urldecode($str1);
//https://www.cnblogs.com/-beyond?type = php
?>

  

Base64编码技术

string base64_encode ( string $data )

string base64_decode ( string $data [, bool $strict = false ] )

使用 base64 对 data 进行编码。设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,例如电子邮件的主体。

常用于将文件,如图片,视频进行编码成ASCII码。

使用示例:

<?php
$str="寻觅 beyond"; //编码
echo base64_encode($str)."<hr>";//5a+76KeFIGJleW9uZA== //解码
echo base64_decode(base64_encode($str));//寻觅 beyond
?>

  

  效率:

统计了很多次,同一个字符串,加密或编码花费的时间从高到低排序如下:

crypt > urlencode > md5 > sha1 > base64_encode

PHP加密与编码技术的更多相关文章

  1. shellcode 编码技术

    在很多漏洞利用场景中, shellcode 的内容将会受到限制. 例如你不能输入 \x00 这个字符,编辑框不能输入 \x0d \x0a这样的字符 所以需要完成 shellcode 的逻辑,然后使用编 ...

  2. H264编码技术

    H.264的目标应用涵盖了眼下大部分的视频服务,如有线电视远程监控.交互媒体.数字电视.视频会议.视频点播.流媒体服务等.H.264为解决不同应用中的网络传输的差异.定义了两层:视频编码层(VCL:V ...

  3. 音视频编解码技术(二):AAC 音频编码技术

    一.AAC编码概述 AAC是高级音频编码(Advanced Audio Coding)的缩写,出现于1997年,最初是基于MPEG-2的音频编码技术,目的是取代MP3格式.2000年,MPEG-4标准 ...

  4. H264编码技术[3]

    H.264的目标应用涵盖了目前大部分的视频服务,如有线电视远程监控.交互媒体.数字电视.视频会议.视频点播.流媒体服务等.H.264为解决不同应用中的网络传输的差异.定义了两层:视频编码层(VCL:V ...

  5. EBS OAF 发展 URL商标、加密和编码

    EBS OAF 发展 URL商标.加密和编码 (版权声明.我原来的或翻译的文章,如需转载,转载的个人学习,转载请注明出处:否则,请与我联系.版权所有) 马克 当您指定页面定义声明URL参数,文本也能够 ...

  6. Redis 数据结构与编码技术 (Object Encoding)

    数据结构实现 相信大家对 redis 的数据结构都比较熟悉: string:字符串(可以表示字符串.整数.位图) list:列表(可以表示线性表.栈.双端队列.阻塞队列) hash:哈希表 set:集 ...

  7. iOS视频硬编码技术

    iOS视频硬编码技术 一.iOS视频采集硬编码 基本原理 硬编码 & 软编码 硬编码:通过系统自带的Camera录制视频,实际上调用的是底层的高清编码硬件模块,即显卡,不使用CPU,速度快 软 ...

  8. C# MD5 32位加密 UTF-8编码

    项目开发过程中需要用到MD5加密,最开始的使用使用加密方法: public static string GetMD5(string str)        {            byte[] b ...

  9. java中使用MD5进行加密 BASE64Encoder 编码

    原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密     在各种应用系统的开发中,经常需 ...

随机推荐

  1. JFreeChart柱状图单组柱子的不同颜色显示

    JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法. 实现效果如下 ...

  2. python六十课——高阶函数之map

    1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...

  3. read_csv报错Initializing from file failed

    Python版本:Python 3.6 pandas.read_csv() 报错 OSError: Initializing from file failed,一般由两种情况引起:一种是函数参数为路径 ...

  4. AdapterView<T extends Adapter>

    http://zhidao.baidu.com/link?url=mgs08yinrG-rt2864QvlbKmdbyn9rm-KTqm1CODNQpVLnVvAndkJRVJ8mN4_XkNDB2_ ...

  5. MapReduce全局变量之捉虫记

    全局变量 写MapReduce程序时候,有时候须要用到全局变量,经常使用的全局变量实现由三种方式: 通过作业的Configuration传递全局变量.作业初始化的时候.conf.set(),须要的时候 ...

  6. 详解PHP操作Memcache缓存技术提高响应速度的方法

    本文转载http://blog.csdn.net/zhihua_w  不错的博客,仅供本人学习之用 一般来说,如果并发量不大的情况,使不使用缓存技术并没有什么影响,但如果高并发的情况,使用缓存技术就显 ...

  7. (4)top详解 (每周一个linux命令系列)

    (4)top详解 (每周一个linux命令系列) linux命令 top详解 引言:今天的命令是用来看cpu信息的top top 我们先看man top top - display Linux pro ...

  8. webpack4对第三方库css,项目全局css和vue内联css文件提取到单独的文件(二十二)

    在讲解提取css之前,我们先看下项目的架构如下结构: ### 目录结构如下: demo1 # 工程名 | |--- dist # 打包后生成的目录文件 | |--- node_modules # 所有 ...

  9. iScroll.js插件使用方法

    iScroll.js 用法参考 (share) 分享是传播.学习知识最好的方法 以下这篇文章是iScroll.js官网的中文翻译,尽管自己英文不好,但觉得原作者们翻译的这个资料还是可以的,基本用法介绍 ...

  10. Android开发中代码下面出现波浪线问题

    在Android Studio中写代码时,经常会在一个英文单词的下面出现波浪线,这是因为系统检测到你的这个英文单词不符合规范,如下所示: 解决办法:选中这个单词,点击鼠标右键,点击:Spelling ...