PHP 加密和解密

计应134(实验班) 郑寿奎

一、crypt()函数单向加密

语法格式:

String crypt(string str[, string salt]);

参数str是需要加密的值,salt是干扰串,如果把salt省略就会随机生成一个干扰串

设置干扰串和不设置干扰串的区别:

设置干扰串之后的值是一直不会变的

不设置干扰串之后的值是随机的,每一次都不一样

代码如下:

<?php
$str="这是个值";
echo ‘加密前的值:‘.$str."<br>";
$jiami=crypt($str);
echo ‘没有干扰串加密后的值:‘.$jiami."<br>";
$jia=crypt($str,"ab");
echo ‘添加干扰串"ab"加密后的值:‘.$jia."<br>";
?>

第一次运行结果如下图:

第二次运行结果如下图:

crypt()函数加密是单向加密的,如果不加干扰串,那么每次加密的结果都是不一样的,但是加了干扰串之后可以发现,每次的值都是一样的。

所以对加密后的数据进行判断就需要在加密之前加上干扰串

二、md5()函数加密

语法格式:

string md5(string str[, bool raw_output]);

参数str是需要加密的数据,raw_output的值是true和false,默认为false,如果为true的是后,那么函数就会返回一个二进制形式的密文

md5()函数加密的密文是一直不会变的

代码:

<?php
$str="这是个值";
echo ‘加密前的值:‘.$str."<br>";
$jiami=md5($str);
echo ‘默认加密后的值:‘.$jiami."<br>";
$jiami=md5($str,true);
echo ‘true加密后的值:‘.$jiami."<br>";
?>

运行结果如下图:

三、sha1()函数加密

语法格式:

string sha1(string str[, bool raw_output]);

参数str是需要加密的数据,raw_output默认false,函数返回一个40位的十六进制数,true 返回20的二进制数

sha1()函数加密后的密文是不会变的

代码:

<?php
$str="这是个值";
echo ‘加密前的值:‘.$str."<br>";
$jiami=sha1($str);
echo ‘默认加密后的值:‘.$jiami."<br>";
$jiami=sha1($str,true);
echo ‘true加密后的值:‘.$jiami."<br>";
?>

运行结果如下图:

四、加密和解密

代码:

<?php
//加密
function encode($string = ‘‘, $skey = ‘cxphp‘) {
    $strArr = str_split(base64_encode($string));
    $strCount = count($strArr);
    foreach (str_split($skey) as $key => $value)
        $key < $strCount && $strArr[$key].=$value;
    return str_replace(array(‘=‘, ‘+‘, ‘/‘), array(‘O0O0O‘, ‘o000o‘, ‘oo00o‘), join(‘‘, $strArr));
 }

//解密
function decode($string = ‘‘, $skey = ‘cxphp‘) {
    $strArr = str_split(str_replace(array(‘O0O0O‘, ‘o000o‘, ‘oo00o‘), array(‘=‘, ‘+‘, ‘/‘), $string), 2);
    $strCount = count($strArr);
    foreach (str_split($skey) as $key => $value)
        $key <= $strCount  && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
    return base64_decode(join(‘‘, $strArr));
 }

$str = ‘四大古典风格‘;
echo "string : " . $str . " <br />";
echo "encode : " . ($enstring = encode($str)) . ‘<br />‘;
echo "decode : " . decode($enstring);
?>

运行结果如下图:

时间: 2024-08-09 22:01:40

PHP 加密和解密的相关文章

Java DES 加密和解密源码

Java密码学结构设计遵循两个原则: 1) 算法的独立性和可靠性. 2) 实现的独立性和相互作用性. 算法的独立性是通过定义密码服务类来获得.用户只需了解密码算法的概念,而不用去关心如何实现这些概念.实现的独立性和相互作用性通过密码服务提供器来实现.密码服务提供器是实现一个或多个密码服务的一个或多个程序包.软件开发商根据一定接口,将各种算法实现后,打包成一个提供器,用户可以安装不同的提供器.安装和配置提供器,可将包含提供器的ZIP和JAR文件放在CLASSPATH下,再编辑Java安全属性文件来

PHP 加密 和 解密 方法

关于Discuz的加密解密函数,相信大家都有所了解,该authcode函数可以说是对PHP界作出了重大的贡献,真的发觉discuz这个函数写的太精彩啦. 研究了一下这个算法,总的来说可以归纳为以下三点: 1,动态性,同一字符串使用相同的key,每次加密的密文都不一样,而解密方法只有一个,其实就是把解密的信息放到了密文上面. 2,时效性,可以自己加一个限期参数,以秒为单位,这个其实就是在密文里加入了有效时间. 3,统一性,加密和解密都用同一个函数,而且用了比较简单的异或算法. 由于该函数具有以上功

AES —— JAVA中对称加密和解密

package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Base64; impor

加密、解密的原理及Openssl创建CA和ssh的基础应用

加密.解密的原理及Openssl创建CA和ssh的基础应用 随着互联网的不断发展和技术的不断成熟,在互联网上传输文件不在安全,在需要传送重要的数据时就必须加密处理. 密码算法分为三种:分别是对称加密,公钥加密,单向加密:以及需要对加密算法的认证,叫做认证协议.下面为大家概述对称加密,公钥加密,单向加密及认证协议 对称加密: 采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密. 需要对加密和解密使用相同密钥的加密算法.由于其速度快,对称性

运维学习之加密和解密

运维学习之加密与解密: 众所周知,在网络的世界里不存在绝对的安全性.各种钓鱼网站,病毒等等危害着我们的网 络环境.所以,作为一个运维人员,在我们利用网络进行通信时,保证通信的机密性.完整性.可用性是必要的. 我们的日常生活中有以下三点威胁网络安全的行为: 1.威胁机密性的攻击行为,它的途径是窃听.嗅探.扫描和通信量分析 2.威胁完整性的攻击行为,它的途径是更改.伪装.重放.否认 3.威胁可用性的攻击行为,它的途径是拒绝服务 为应对以上问题,我们在技术和服务两方面提出了解决方案: 从技术上我们使用

第六章 加密与解密

6.1 什么是加密和解密? 加密技术是最常用的安全保密手段,利用技术手段把重要的数据变为乱码(加密)传送,到达目的地后再用相同或不同的手段还原(解密). 6.2 加密技术二元素:算法和密钥 算法是将普通的信息或者可以理解的信息与一串数字(密钥)结合,产生不可理解的官方的步骤: 密钥是用来对数据进行编码和解密的一种算法. 在安全保密中,可通过适当的密钥加密技术和管理机制来保证网络的信息通信安全,使得未授权的用户即使获得了已加密的信息,但因不知解密方法,仍然无法了解信息内容. 6.3 为什么要加密?

RSA算法 JS加密 JAVA解密

有这样一个需求,前端登录的用户名密码,密码必需加密,但不可使用MD5,因为后台要检测密码的复杂度,那么在保证安全的前提下将密码传到后台呢,答案就是使用RSA非对称加密算法解决 . java代码 需要依赖 commons-codec 包 RSACoder.java import org.apache.commons.codec.binary.Base64; import javax.crypto.Cipher; import java.security.*; import java.securit

加密和解密技术基础、PKI及创建私有CA

一.数据加密和解密概述 数据加密和解密是一门历史悠久的技术,从古代就已经出现了,一直发展到当代.其中,数据加密的目的有很多,可以是为了保证本地数据存取的安全性,可以是为了保证数据流在网络传输过程中的保密性,也可以是为了验证数据的完整性,还可以通过数据加密来实现密钥的交换等. 数据加密依赖于某种加密算法和加密密钥,而数据解密则依赖于某种解密算法和解密密钥.而在当代加密解密技术中,加密密钥既可以与解密密钥相同,也可以和解密密钥不同,这取决于使用什么方法进行加解密. 二.安全的目标 就信息传输过程来说

iOS,一行代码进行RSA、DES 、AES、MD5加密、解密

最近做了一个移动项目,是有服务器和客户端类型的项目,客户端是要登录才行的,服务器也会返回数据,服务器是用Java开发的,客户端要同时支持多平台(Android.iOS),在处理iOS的数据加密的时候遇到了一些问题.起初采取的方案是DES加密,老大说DES加密是对称的,网络抓包加上反编译可能会被破解,故采取RSA方式加密.RSA加密时需要公钥和私钥,客户端保存公钥加密数据,服务器保存私钥解密数据.(iOS端公钥加密私钥解密.java端公钥加密私钥解密,java端私钥加密公钥解密都容易做到,iOS不

转:system.Security.Cryptography C# 加密和解密

以下文转自: http://www.360doc.com/content/13/0122/05/19147_261678471.shtml 总结:注册的时候经过MD5加密存进数据库,在登录的时候需要先加密输入的密码,再进行和数据库里的比对,因为同一字符串加密后是一样的,并不是无规则的:实例: string name = this.TextBox1.Text;        string pwd = System.Web.Security.FormsAuthentication.HashPassw